@memberjunction/server 5.7.0 → 5.9.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 (78) hide show
  1. package/README.md +1 -0
  2. package/dist/agents/skip-agent.d.ts +15 -1
  3. package/dist/agents/skip-agent.d.ts.map +1 -1
  4. package/dist/agents/skip-agent.js +78 -36
  5. package/dist/agents/skip-agent.js.map +1 -1
  6. package/dist/agents/skip-sdk.d.ts.map +1 -1
  7. package/dist/agents/skip-sdk.js +12 -0
  8. package/dist/agents/skip-sdk.js.map +1 -1
  9. package/dist/apolloServer/index.d.ts +10 -2
  10. package/dist/apolloServer/index.d.ts.map +1 -1
  11. package/dist/apolloServer/index.js +22 -8
  12. package/dist/apolloServer/index.js.map +1 -1
  13. package/dist/config.d.ts +125 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +23 -0
  16. package/dist/config.js.map +1 -1
  17. package/dist/context.d.ts +17 -0
  18. package/dist/context.d.ts.map +1 -1
  19. package/dist/context.js +144 -62
  20. package/dist/context.js.map +1 -1
  21. package/dist/generated/generated.d.ts +607 -116
  22. package/dist/generated/generated.d.ts.map +1 -1
  23. package/dist/generated/generated.js +3542 -775
  24. package/dist/generated/generated.js.map +1 -1
  25. package/dist/generic/CacheInvalidationResolver.d.ts +32 -0
  26. package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -0
  27. package/dist/generic/CacheInvalidationResolver.js +80 -0
  28. package/dist/generic/CacheInvalidationResolver.js.map +1 -0
  29. package/dist/generic/PubSubManager.d.ts +27 -0
  30. package/dist/generic/PubSubManager.d.ts.map +1 -0
  31. package/dist/generic/PubSubManager.js +42 -0
  32. package/dist/generic/PubSubManager.js.map +1 -0
  33. package/dist/generic/ResolverBase.d.ts +14 -0
  34. package/dist/generic/ResolverBase.d.ts.map +1 -1
  35. package/dist/generic/ResolverBase.js +50 -0
  36. package/dist/generic/ResolverBase.js.map +1 -1
  37. package/dist/hooks.d.ts +65 -0
  38. package/dist/hooks.d.ts.map +1 -0
  39. package/dist/hooks.js +14 -0
  40. package/dist/hooks.js.map +1 -0
  41. package/dist/index.d.ts +6 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +176 -45
  44. package/dist/index.js.map +1 -1
  45. package/dist/multiTenancy/index.d.ts +47 -0
  46. package/dist/multiTenancy/index.d.ts.map +1 -0
  47. package/dist/multiTenancy/index.js +152 -0
  48. package/dist/multiTenancy/index.js.map +1 -0
  49. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +123 -0
  50. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -0
  51. package/dist/resolvers/IntegrationDiscoveryResolver.js +624 -0
  52. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -0
  53. package/dist/rest/RESTEndpointHandler.d.ts +3 -1
  54. package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
  55. package/dist/rest/RESTEndpointHandler.js +14 -33
  56. package/dist/rest/RESTEndpointHandler.js.map +1 -1
  57. package/dist/types.d.ts +9 -0
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/types.js.map +1 -1
  60. package/package.json +61 -57
  61. package/src/__tests__/multiTenancy.security.test.ts +334 -0
  62. package/src/__tests__/multiTenancy.test.ts +225 -0
  63. package/src/__tests__/unifiedAuth.test.ts +416 -0
  64. package/src/agents/skip-agent.ts +87 -34
  65. package/src/agents/skip-sdk.ts +13 -0
  66. package/src/apolloServer/index.ts +32 -16
  67. package/src/config.ts +25 -0
  68. package/src/context.ts +205 -98
  69. package/src/generated/generated.ts +2334 -430
  70. package/src/generic/CacheInvalidationResolver.ts +66 -0
  71. package/src/generic/PubSubManager.ts +47 -0
  72. package/src/generic/ResolverBase.ts +53 -0
  73. package/src/hooks.ts +77 -0
  74. package/src/index.ts +203 -49
  75. package/src/multiTenancy/index.ts +183 -0
  76. package/src/resolvers/IntegrationDiscoveryResolver.ts +584 -0
  77. package/src/rest/RESTEndpointHandler.ts +23 -42
  78. package/src/types.ts +10 -0
@@ -0,0 +1,624 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { Resolver, Query, Arg, Ctx, ObjectType, Field, InputType } from "type-graphql";
14
+ import { Metadata, LogError } from "@memberjunction/core";
15
+ import { ConnectorFactory } from "@memberjunction/integration-engine";
16
+ import { SchemaBuilder, TypeMapper } from "@memberjunction/integration-schema-builder";
17
+ import { ResolverBase } from "../generic/ResolverBase.js";
18
+ // --- Output Types ---
19
+ let ExternalObjectOutput = class ExternalObjectOutput {
20
+ };
21
+ __decorate([
22
+ Field(),
23
+ __metadata("design:type", String)
24
+ ], ExternalObjectOutput.prototype, "Name", void 0);
25
+ __decorate([
26
+ Field(),
27
+ __metadata("design:type", String)
28
+ ], ExternalObjectOutput.prototype, "Label", void 0);
29
+ __decorate([
30
+ Field(),
31
+ __metadata("design:type", Boolean)
32
+ ], ExternalObjectOutput.prototype, "SupportsIncrementalSync", void 0);
33
+ __decorate([
34
+ Field(),
35
+ __metadata("design:type", Boolean)
36
+ ], ExternalObjectOutput.prototype, "SupportsWrite", void 0);
37
+ ExternalObjectOutput = __decorate([
38
+ ObjectType()
39
+ ], ExternalObjectOutput);
40
+ let DiscoverObjectsOutput = class DiscoverObjectsOutput {
41
+ };
42
+ __decorate([
43
+ Field(),
44
+ __metadata("design:type", Boolean)
45
+ ], DiscoverObjectsOutput.prototype, "Success", void 0);
46
+ __decorate([
47
+ Field(),
48
+ __metadata("design:type", String)
49
+ ], DiscoverObjectsOutput.prototype, "Message", void 0);
50
+ __decorate([
51
+ Field(() => [ExternalObjectOutput], { nullable: true }),
52
+ __metadata("design:type", Array)
53
+ ], DiscoverObjectsOutput.prototype, "Objects", void 0);
54
+ DiscoverObjectsOutput = __decorate([
55
+ ObjectType()
56
+ ], DiscoverObjectsOutput);
57
+ let ExternalFieldOutput = class ExternalFieldOutput {
58
+ };
59
+ __decorate([
60
+ Field(),
61
+ __metadata("design:type", String)
62
+ ], ExternalFieldOutput.prototype, "Name", void 0);
63
+ __decorate([
64
+ Field(),
65
+ __metadata("design:type", String)
66
+ ], ExternalFieldOutput.prototype, "Label", void 0);
67
+ __decorate([
68
+ Field(),
69
+ __metadata("design:type", String)
70
+ ], ExternalFieldOutput.prototype, "DataType", void 0);
71
+ __decorate([
72
+ Field(),
73
+ __metadata("design:type", Boolean)
74
+ ], ExternalFieldOutput.prototype, "IsRequired", void 0);
75
+ __decorate([
76
+ Field(),
77
+ __metadata("design:type", Boolean)
78
+ ], ExternalFieldOutput.prototype, "IsUniqueKey", void 0);
79
+ __decorate([
80
+ Field(),
81
+ __metadata("design:type", Boolean)
82
+ ], ExternalFieldOutput.prototype, "IsReadOnly", void 0);
83
+ ExternalFieldOutput = __decorate([
84
+ ObjectType()
85
+ ], ExternalFieldOutput);
86
+ let DiscoverFieldsOutput = class DiscoverFieldsOutput {
87
+ };
88
+ __decorate([
89
+ Field(),
90
+ __metadata("design:type", Boolean)
91
+ ], DiscoverFieldsOutput.prototype, "Success", void 0);
92
+ __decorate([
93
+ Field(),
94
+ __metadata("design:type", String)
95
+ ], DiscoverFieldsOutput.prototype, "Message", void 0);
96
+ __decorate([
97
+ Field(() => [ExternalFieldOutput], { nullable: true }),
98
+ __metadata("design:type", Array)
99
+ ], DiscoverFieldsOutput.prototype, "Fields", void 0);
100
+ DiscoverFieldsOutput = __decorate([
101
+ ObjectType()
102
+ ], DiscoverFieldsOutput);
103
+ let ConnectionTestOutput = class ConnectionTestOutput {
104
+ };
105
+ __decorate([
106
+ Field(),
107
+ __metadata("design:type", Boolean)
108
+ ], ConnectionTestOutput.prototype, "Success", void 0);
109
+ __decorate([
110
+ Field(),
111
+ __metadata("design:type", String)
112
+ ], ConnectionTestOutput.prototype, "Message", void 0);
113
+ __decorate([
114
+ Field(() => String, { nullable: true }),
115
+ __metadata("design:type", String)
116
+ ], ConnectionTestOutput.prototype, "ServerVersion", void 0);
117
+ ConnectionTestOutput = __decorate([
118
+ ObjectType()
119
+ ], ConnectionTestOutput);
120
+ // --- Preview Data Types ---
121
+ let PreviewRecordOutput = class PreviewRecordOutput {
122
+ };
123
+ __decorate([
124
+ Field(() => String),
125
+ __metadata("design:type", String)
126
+ ], PreviewRecordOutput.prototype, "Data", void 0);
127
+ PreviewRecordOutput = __decorate([
128
+ ObjectType()
129
+ ], PreviewRecordOutput);
130
+ let PreviewDataOutput = class PreviewDataOutput {
131
+ };
132
+ __decorate([
133
+ Field(),
134
+ __metadata("design:type", Boolean)
135
+ ], PreviewDataOutput.prototype, "Success", void 0);
136
+ __decorate([
137
+ Field(),
138
+ __metadata("design:type", String)
139
+ ], PreviewDataOutput.prototype, "Message", void 0);
140
+ __decorate([
141
+ Field(() => [PreviewRecordOutput], { nullable: true }),
142
+ __metadata("design:type", Array)
143
+ ], PreviewDataOutput.prototype, "Records", void 0);
144
+ PreviewDataOutput = __decorate([
145
+ ObjectType()
146
+ ], PreviewDataOutput);
147
+ // --- Schema Preview Types ---
148
+ let SchemaPreviewObjectInput = class SchemaPreviewObjectInput {
149
+ };
150
+ __decorate([
151
+ Field(),
152
+ __metadata("design:type", String)
153
+ ], SchemaPreviewObjectInput.prototype, "SourceObjectName", void 0);
154
+ __decorate([
155
+ Field(),
156
+ __metadata("design:type", String)
157
+ ], SchemaPreviewObjectInput.prototype, "SchemaName", void 0);
158
+ __decorate([
159
+ Field(),
160
+ __metadata("design:type", String)
161
+ ], SchemaPreviewObjectInput.prototype, "TableName", void 0);
162
+ __decorate([
163
+ Field(),
164
+ __metadata("design:type", String)
165
+ ], SchemaPreviewObjectInput.prototype, "EntityName", void 0);
166
+ SchemaPreviewObjectInput = __decorate([
167
+ InputType()
168
+ ], SchemaPreviewObjectInput);
169
+ let SchemaPreviewFileOutput = class SchemaPreviewFileOutput {
170
+ };
171
+ __decorate([
172
+ Field(),
173
+ __metadata("design:type", String)
174
+ ], SchemaPreviewFileOutput.prototype, "FilePath", void 0);
175
+ __decorate([
176
+ Field(),
177
+ __metadata("design:type", String)
178
+ ], SchemaPreviewFileOutput.prototype, "Content", void 0);
179
+ __decorate([
180
+ Field(),
181
+ __metadata("design:type", String)
182
+ ], SchemaPreviewFileOutput.prototype, "Description", void 0);
183
+ SchemaPreviewFileOutput = __decorate([
184
+ ObjectType()
185
+ ], SchemaPreviewFileOutput);
186
+ let SchemaPreviewOutput = class SchemaPreviewOutput {
187
+ };
188
+ __decorate([
189
+ Field(),
190
+ __metadata("design:type", Boolean)
191
+ ], SchemaPreviewOutput.prototype, "Success", void 0);
192
+ __decorate([
193
+ Field(),
194
+ __metadata("design:type", String)
195
+ ], SchemaPreviewOutput.prototype, "Message", void 0);
196
+ __decorate([
197
+ Field(() => [SchemaPreviewFileOutput], { nullable: true }),
198
+ __metadata("design:type", Array)
199
+ ], SchemaPreviewOutput.prototype, "Files", void 0);
200
+ __decorate([
201
+ Field(() => [String], { nullable: true }),
202
+ __metadata("design:type", Array)
203
+ ], SchemaPreviewOutput.prototype, "Warnings", void 0);
204
+ SchemaPreviewOutput = __decorate([
205
+ ObjectType()
206
+ ], SchemaPreviewOutput);
207
+ // --- Default Configuration Types ---
208
+ let DefaultFieldMappingOutput = class DefaultFieldMappingOutput {
209
+ };
210
+ __decorate([
211
+ Field(),
212
+ __metadata("design:type", String)
213
+ ], DefaultFieldMappingOutput.prototype, "SourceFieldName", void 0);
214
+ __decorate([
215
+ Field(),
216
+ __metadata("design:type", String)
217
+ ], DefaultFieldMappingOutput.prototype, "DestinationFieldName", void 0);
218
+ __decorate([
219
+ Field({ nullable: true }),
220
+ __metadata("design:type", Boolean)
221
+ ], DefaultFieldMappingOutput.prototype, "IsKeyField", void 0);
222
+ DefaultFieldMappingOutput = __decorate([
223
+ ObjectType()
224
+ ], DefaultFieldMappingOutput);
225
+ let DefaultObjectConfigOutput = class DefaultObjectConfigOutput {
226
+ };
227
+ __decorate([
228
+ Field(),
229
+ __metadata("design:type", String)
230
+ ], DefaultObjectConfigOutput.prototype, "SourceObjectName", void 0);
231
+ __decorate([
232
+ Field(),
233
+ __metadata("design:type", String)
234
+ ], DefaultObjectConfigOutput.prototype, "TargetTableName", void 0);
235
+ __decorate([
236
+ Field(),
237
+ __metadata("design:type", String)
238
+ ], DefaultObjectConfigOutput.prototype, "TargetEntityName", void 0);
239
+ __decorate([
240
+ Field(),
241
+ __metadata("design:type", Boolean)
242
+ ], DefaultObjectConfigOutput.prototype, "SyncEnabled", void 0);
243
+ __decorate([
244
+ Field(() => [DefaultFieldMappingOutput]),
245
+ __metadata("design:type", Array)
246
+ ], DefaultObjectConfigOutput.prototype, "FieldMappings", void 0);
247
+ DefaultObjectConfigOutput = __decorate([
248
+ ObjectType()
249
+ ], DefaultObjectConfigOutput);
250
+ let DefaultConfigOutput = class DefaultConfigOutput {
251
+ };
252
+ __decorate([
253
+ Field(),
254
+ __metadata("design:type", Boolean)
255
+ ], DefaultConfigOutput.prototype, "Success", void 0);
256
+ __decorate([
257
+ Field(),
258
+ __metadata("design:type", String)
259
+ ], DefaultConfigOutput.prototype, "Message", void 0);
260
+ __decorate([
261
+ Field({ nullable: true }),
262
+ __metadata("design:type", String)
263
+ ], DefaultConfigOutput.prototype, "DefaultSchemaName", void 0);
264
+ __decorate([
265
+ Field(() => [DefaultObjectConfigOutput], { nullable: true }),
266
+ __metadata("design:type", Array)
267
+ ], DefaultConfigOutput.prototype, "DefaultObjects", void 0);
268
+ DefaultConfigOutput = __decorate([
269
+ ObjectType()
270
+ ], DefaultConfigOutput);
271
+ // --- Resolver ---
272
+ /**
273
+ * GraphQL resolver for integration discovery operations.
274
+ * Provides endpoints to test connections, discover objects, and discover fields
275
+ * on external systems via their registered connectors.
276
+ */
277
+ let IntegrationDiscoveryResolver = class IntegrationDiscoveryResolver extends ResolverBase {
278
+ /**
279
+ * Discovers available objects/tables in the external system.
280
+ */
281
+ async IntegrationDiscoverObjects(companyIntegrationID, ctx) {
282
+ try {
283
+ const user = this.getAuthenticatedUser(ctx);
284
+ const { connector, companyIntegration } = await this.resolveConnector(companyIntegrationID, user);
285
+ // Cast through unknown to bridge duplicate package type declarations
286
+ // (integration-engine resolves its own node_modules copies of core/core-entities)
287
+ const discoverObjects = connector.DiscoverObjects.bind(connector);
288
+ const objects = await discoverObjects(companyIntegration, user);
289
+ return {
290
+ Success: true,
291
+ Message: `Discovered ${objects.length} objects`,
292
+ Objects: objects.map(o => ({
293
+ Name: o.Name,
294
+ Label: o.Label,
295
+ SupportsIncrementalSync: o.SupportsIncrementalSync,
296
+ SupportsWrite: o.SupportsWrite
297
+ }))
298
+ };
299
+ }
300
+ catch (e) {
301
+ return this.handleDiscoveryError(e);
302
+ }
303
+ }
304
+ /**
305
+ * Discovers fields on a specific external object.
306
+ */
307
+ async IntegrationDiscoverFields(companyIntegrationID, objectName, ctx) {
308
+ try {
309
+ const user = this.getAuthenticatedUser(ctx);
310
+ const { connector, companyIntegration } = await this.resolveConnector(companyIntegrationID, user);
311
+ // Cast through unknown to bridge duplicate package type declarations
312
+ const discoverFields = connector.DiscoverFields.bind(connector);
313
+ const fields = await discoverFields(companyIntegration, objectName, user);
314
+ return {
315
+ Success: true,
316
+ Message: `Discovered ${fields.length} fields on "${objectName}"`,
317
+ Fields: fields.map(f => ({
318
+ Name: f.Name,
319
+ Label: f.Label,
320
+ DataType: f.DataType,
321
+ IsRequired: f.IsRequired,
322
+ IsUniqueKey: f.IsUniqueKey,
323
+ IsReadOnly: f.IsReadOnly
324
+ }))
325
+ };
326
+ }
327
+ catch (e) {
328
+ return this.handleDiscoveryError(e);
329
+ }
330
+ }
331
+ /**
332
+ * Tests connectivity to the external system.
333
+ */
334
+ async IntegrationTestConnection(companyIntegrationID, ctx) {
335
+ try {
336
+ const user = this.getAuthenticatedUser(ctx);
337
+ const { connector, companyIntegration } = await this.resolveConnector(companyIntegrationID, user);
338
+ // Cast through unknown to bridge duplicate package type declarations
339
+ const testConnection = connector.TestConnection.bind(connector);
340
+ const result = await testConnection(companyIntegration, user);
341
+ return {
342
+ Success: result.Success,
343
+ Message: result.Message,
344
+ ServerVersion: result.ServerVersion
345
+ };
346
+ }
347
+ catch (e) {
348
+ const error = e;
349
+ LogError(`IntegrationTestConnection error: ${error}`);
350
+ return {
351
+ Success: false,
352
+ Message: `Error: ${error.message}`
353
+ };
354
+ }
355
+ }
356
+ /**
357
+ * Returns the connector's default configuration for quick setup.
358
+ * Not all connectors provide defaults — returns Success: false if unavailable.
359
+ */
360
+ async IntegrationGetDefaultConfig(companyIntegrationID, ctx) {
361
+ try {
362
+ const user = this.getAuthenticatedUser(ctx);
363
+ const { connector } = await this.resolveConnector(companyIntegrationID, user);
364
+ const config = connector.GetDefaultConfiguration();
365
+ if (!config) {
366
+ return {
367
+ Success: false,
368
+ Message: 'This connector does not provide a default configuration'
369
+ };
370
+ }
371
+ return {
372
+ Success: true,
373
+ Message: `Default configuration with ${config.DefaultObjects.length} objects`,
374
+ DefaultSchemaName: config.DefaultSchemaName,
375
+ DefaultObjects: config.DefaultObjects.map(o => ({
376
+ SourceObjectName: o.SourceObjectName,
377
+ TargetTableName: o.TargetTableName,
378
+ TargetEntityName: o.TargetEntityName,
379
+ SyncEnabled: o.SyncEnabled,
380
+ FieldMappings: o.FieldMappings.map(f => ({
381
+ SourceFieldName: f.SourceFieldName,
382
+ DestinationFieldName: f.DestinationFieldName,
383
+ IsKeyField: f.IsKeyField
384
+ }))
385
+ }))
386
+ };
387
+ }
388
+ catch (e) {
389
+ const error = e;
390
+ LogError(`IntegrationGetDefaultConfig error: ${error}`);
391
+ return {
392
+ Success: false,
393
+ Message: `Error: ${error.message}`
394
+ };
395
+ }
396
+ }
397
+ /**
398
+ * Generates a DDL preview for creating tables from discovered external objects.
399
+ * Introspects the source schema and runs SchemaBuilder to produce migration SQL.
400
+ */
401
+ async IntegrationSchemaPreview(companyIntegrationID, objects, platform, ctx) {
402
+ try {
403
+ const user = this.getAuthenticatedUser(ctx);
404
+ const { connector, companyIntegration } = await this.resolveConnector(companyIntegrationID, user);
405
+ // Introspect schema from the external system
406
+ const introspect = connector.IntrospectSchema.bind(connector);
407
+ const sourceSchema = await introspect(companyIntegration, user);
408
+ // Filter to only requested objects
409
+ const requestedNames = new Set(objects.map(o => o.SourceObjectName));
410
+ const filteredSchema = {
411
+ Objects: sourceSchema.Objects.filter(o => requestedNames.has(o.ExternalName))
412
+ };
413
+ // Build target configs from user input + source schema
414
+ const targetConfigs = this.buildTargetConfigs(objects, filteredSchema, platform);
415
+ // Run SchemaBuilder
416
+ const input = {
417
+ SourceSchema: filteredSchema,
418
+ TargetConfigs: targetConfigs,
419
+ Platform: platform,
420
+ MJVersion: '5.7.0',
421
+ SourceType: companyIntegration.Integration,
422
+ AdditionalSchemaInfoPath: 'additionalSchemaInfo.json',
423
+ MigrationsDir: 'migrations/v2',
424
+ MetadataDir: 'metadata',
425
+ ExistingTables: [],
426
+ EntitySettingsForTargets: {}
427
+ };
428
+ const builder = new SchemaBuilder();
429
+ const output = builder.BuildSchema(input);
430
+ if (output.Errors.length > 0) {
431
+ return {
432
+ Success: false,
433
+ Message: `Schema generation failed: ${output.Errors.join('; ')}`,
434
+ Warnings: output.Warnings
435
+ };
436
+ }
437
+ const allFiles = [
438
+ ...output.MigrationFiles,
439
+ ...(output.AdditionalSchemaInfoUpdate ? [output.AdditionalSchemaInfoUpdate] : []),
440
+ ...output.MetadataFiles
441
+ ];
442
+ return {
443
+ Success: true,
444
+ Message: `Generated ${allFiles.length} files`,
445
+ Files: allFiles.map(f => ({
446
+ FilePath: f.FilePath,
447
+ Content: f.Content,
448
+ Description: f.Description
449
+ })),
450
+ Warnings: output.Warnings.length > 0 ? output.Warnings : undefined
451
+ };
452
+ }
453
+ catch (e) {
454
+ const error = e;
455
+ LogError(`IntegrationSchemaPreview error: ${error}`);
456
+ return {
457
+ Success: false,
458
+ Message: `Error: ${error.message}`
459
+ };
460
+ }
461
+ }
462
+ /**
463
+ * Fetches a small sample of records from an external object for preview purposes.
464
+ * Uses the connector's FetchChanges with a small batch size and no watermark.
465
+ */
466
+ async IntegrationPreviewData(companyIntegrationID, objectName, limit, ctx) {
467
+ try {
468
+ const user = this.getAuthenticatedUser(ctx);
469
+ const { connector, companyIntegration } = await this.resolveConnector(companyIntegrationID, user);
470
+ const fetchChanges = connector.FetchChanges.bind(connector);
471
+ const result = await fetchChanges({
472
+ CompanyIntegration: companyIntegration,
473
+ ObjectName: objectName,
474
+ WatermarkValue: null,
475
+ BatchSize: Math.min(limit, 10),
476
+ ContextUser: user
477
+ });
478
+ return {
479
+ Success: true,
480
+ Message: `Fetched ${result.Records.length} preview records`,
481
+ Records: result.Records.map(r => ({
482
+ Data: JSON.stringify(r.Fields)
483
+ }))
484
+ };
485
+ }
486
+ catch (e) {
487
+ const error = e;
488
+ LogError(`IntegrationPreviewData error: ${error}`);
489
+ return {
490
+ Success: false,
491
+ Message: `Error: ${error.message}`
492
+ };
493
+ }
494
+ }
495
+ // --- Private Helpers ---
496
+ buildTargetConfigs(objects, sourceSchema, platform) {
497
+ const mapper = new TypeMapper();
498
+ return objects.map(obj => {
499
+ const sourceObj = sourceSchema.Objects.find(o => o.ExternalName === obj.SourceObjectName);
500
+ const columns = (sourceObj?.Fields ?? []).map(f => ({
501
+ SourceFieldName: f.Name,
502
+ TargetColumnName: f.Name.replace(/[^A-Za-z0-9_]/g, '_'),
503
+ TargetSqlType: mapper.MapSourceType(f.SourceType, platform, f),
504
+ IsNullable: !f.IsRequired,
505
+ MaxLength: f.MaxLength,
506
+ Precision: f.Precision,
507
+ Scale: f.Scale,
508
+ DefaultValue: f.DefaultValue
509
+ }));
510
+ const primaryKeyFields = (sourceObj?.Fields ?? [])
511
+ .filter(f => f.IsPrimaryKey)
512
+ .map(f => f.Name.replace(/[^A-Za-z0-9_]/g, '_'));
513
+ return {
514
+ SourceObjectName: obj.SourceObjectName,
515
+ SchemaName: obj.SchemaName,
516
+ TableName: obj.TableName,
517
+ EntityName: obj.EntityName,
518
+ Columns: columns,
519
+ PrimaryKeyFields: primaryKeyFields.length > 0 ? primaryKeyFields : ['ID'],
520
+ SoftForeignKeys: []
521
+ };
522
+ });
523
+ }
524
+ getAuthenticatedUser(ctx) {
525
+ const user = ctx.userPayload.userRecord;
526
+ if (!user) {
527
+ throw new Error("User is not authenticated");
528
+ }
529
+ return user;
530
+ }
531
+ /**
532
+ * Loads the CompanyIntegration + its parent Integration, then resolves the
533
+ * appropriate connector via ConnectorFactory.
534
+ *
535
+ * NOTE: Entity objects loaded here come from the MJServer's copy of core-entities.
536
+ * The integration-engine package may resolve its own copy of core-entities, causing
537
+ * TypeScript nominal type mismatches. At runtime the objects are structurally identical,
538
+ * so we cast through `unknown` at the boundary calls.
539
+ */
540
+ async resolveConnector(companyIntegrationID, contextUser) {
541
+ const md = new Metadata();
542
+ // Load the CompanyIntegration record
543
+ const companyIntegration = await md.GetEntityObject('MJ: Company Integrations', contextUser);
544
+ const loaded = await companyIntegration.Load(companyIntegrationID);
545
+ if (!loaded) {
546
+ throw new Error(`CompanyIntegration with ID "${companyIntegrationID}" not found`);
547
+ }
548
+ // Load the parent Integration record
549
+ const integration = await md.GetEntityObject('MJ: Integrations', contextUser);
550
+ const integrationLoaded = await integration.Load(companyIntegration.IntegrationID);
551
+ if (!integrationLoaded) {
552
+ throw new Error(`Integration with ID "${companyIntegration.IntegrationID}" not found`);
553
+ }
554
+ // ConnectorFactory expects its own copy of core-entities types — cast through unknown
555
+ const connector = ConnectorFactory.Resolve(integration);
556
+ return { connector, companyIntegration };
557
+ }
558
+ handleDiscoveryError(e) {
559
+ const error = e;
560
+ LogError(`Integration discovery error: ${error}`);
561
+ return {
562
+ Success: false,
563
+ Message: `Error: ${error.message}`
564
+ };
565
+ }
566
+ };
567
+ __decorate([
568
+ Query(() => DiscoverObjectsOutput),
569
+ __param(0, Arg("companyIntegrationID")),
570
+ __param(1, Ctx()),
571
+ __metadata("design:type", Function),
572
+ __metadata("design:paramtypes", [String, Object]),
573
+ __metadata("design:returntype", Promise)
574
+ ], IntegrationDiscoveryResolver.prototype, "IntegrationDiscoverObjects", null);
575
+ __decorate([
576
+ Query(() => DiscoverFieldsOutput),
577
+ __param(0, Arg("companyIntegrationID")),
578
+ __param(1, Arg("objectName")),
579
+ __param(2, Ctx()),
580
+ __metadata("design:type", Function),
581
+ __metadata("design:paramtypes", [String, String, Object]),
582
+ __metadata("design:returntype", Promise)
583
+ ], IntegrationDiscoveryResolver.prototype, "IntegrationDiscoverFields", null);
584
+ __decorate([
585
+ Query(() => ConnectionTestOutput),
586
+ __param(0, Arg("companyIntegrationID")),
587
+ __param(1, Ctx()),
588
+ __metadata("design:type", Function),
589
+ __metadata("design:paramtypes", [String, Object]),
590
+ __metadata("design:returntype", Promise)
591
+ ], IntegrationDiscoveryResolver.prototype, "IntegrationTestConnection", null);
592
+ __decorate([
593
+ Query(() => DefaultConfigOutput),
594
+ __param(0, Arg("companyIntegrationID")),
595
+ __param(1, Ctx()),
596
+ __metadata("design:type", Function),
597
+ __metadata("design:paramtypes", [String, Object]),
598
+ __metadata("design:returntype", Promise)
599
+ ], IntegrationDiscoveryResolver.prototype, "IntegrationGetDefaultConfig", null);
600
+ __decorate([
601
+ Query(() => SchemaPreviewOutput),
602
+ __param(0, Arg("companyIntegrationID")),
603
+ __param(1, Arg("objects", () => [SchemaPreviewObjectInput])),
604
+ __param(2, Arg("platform", { defaultValue: "sqlserver" })),
605
+ __param(3, Ctx()),
606
+ __metadata("design:type", Function),
607
+ __metadata("design:paramtypes", [String, Array, String, Object]),
608
+ __metadata("design:returntype", Promise)
609
+ ], IntegrationDiscoveryResolver.prototype, "IntegrationSchemaPreview", null);
610
+ __decorate([
611
+ Query(() => PreviewDataOutput),
612
+ __param(0, Arg("companyIntegrationID")),
613
+ __param(1, Arg("objectName")),
614
+ __param(2, Arg("limit", { defaultValue: 5 })),
615
+ __param(3, Ctx()),
616
+ __metadata("design:type", Function),
617
+ __metadata("design:paramtypes", [String, String, Number, Object]),
618
+ __metadata("design:returntype", Promise)
619
+ ], IntegrationDiscoveryResolver.prototype, "IntegrationPreviewData", null);
620
+ IntegrationDiscoveryResolver = __decorate([
621
+ Resolver()
622
+ ], IntegrationDiscoveryResolver);
623
+ export { IntegrationDiscoveryResolver };
624
+ //# sourceMappingURL=IntegrationDiscoveryResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntegrationDiscoveryResolver.js","sourceRoot":"","sources":["../../src/resolvers/IntegrationDiscoveryResolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAY,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEpE,OAAO,EAEH,gBAAgB,EAKnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,aAAa,EACb,UAAU,EAIb,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,uBAAuB;AAGvB,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAYzB,CAAA;AAVG;IADC,KAAK,EAAE;;kDACK;AAGb;IADC,KAAK,EAAE;;mDACM;AAGd;IADC,KAAK,EAAE;;qEACyB;AAGjC;IADC,KAAK,EAAE;;2DACe;AAXrB,oBAAoB;IADzB,UAAU,EAAE;GACP,oBAAoB,CAYzB;AAGD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAS1B,CAAA;AAPG;IADC,KAAK,EAAE;;sDACS;AAGjB;IADC,KAAK,EAAE;;sDACQ;AAGhB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sDACvB;AAR/B,qBAAqB;IAD1B,UAAU,EAAE;GACP,qBAAqB,CAS1B;AAGD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAkBxB,CAAA;AAhBG;IADC,KAAK,EAAE;;iDACK;AAGb;IADC,KAAK,EAAE;;kDACM;AAGd;IADC,KAAK,EAAE;;qDACS;AAGjB;IADC,KAAK,EAAE;;uDACY;AAGpB;IADC,KAAK,EAAE;;wDACa;AAGrB;IADC,KAAK,EAAE;;uDACY;AAjBlB,mBAAmB;IADxB,UAAU,EAAE;GACP,mBAAmB,CAkBxB;AAGD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CASzB,CAAA;AAPG;IADC,KAAK,EAAE;;qDACS;AAGjB;IADC,KAAK,EAAE;;qDACQ;AAGhB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oDACxB;AAR7B,oBAAoB;IADzB,UAAU,EAAE;GACP,oBAAoB,CASzB;AAGD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CASzB,CAAA;AAPG;IADC,KAAK,EAAE;;qDACS;AAGjB;IADC,KAAK,EAAE;;qDACQ;AAGhB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2DACjB;AARrB,oBAAoB;IADzB,UAAU,EAAE;GACP,oBAAoB,CASzB;AAED,6BAA6B;AAG7B,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAGxB,CAAA;AADG;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;iDACP;AAFX,mBAAmB;IADxB,UAAU,EAAE;GACP,mBAAmB,CAGxB;AAGD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAStB,CAAA;AAPG;IADC,KAAK,EAAE;;kDACS;AAGjB;IADC,KAAK,EAAE;;kDACQ;AAGhB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACvB;AAR9B,iBAAiB;IADtB,UAAU,EAAE;GACP,iBAAiB,CAStB;AAED,+BAA+B;AAG/B,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;CAY7B,CAAA;AAVG;IADC,KAAK,EAAE;;kEACiB;AAGzB;IADC,KAAK,EAAE;;4DACW;AAGnB;IADC,KAAK,EAAE;;2DACU;AAGlB;IADC,KAAK,EAAE;;4DACW;AAXjB,wBAAwB;IAD7B,SAAS,EAAE;GACN,wBAAwB,CAY7B;AAGD,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CAS5B,CAAA;AAPG;IADC,KAAK,EAAE;;yDACS;AAGjB;IADC,KAAK,EAAE;;wDACQ;AAGhB;IADC,KAAK,EAAE;;4DACY;AARlB,uBAAuB;IAD5B,UAAU,EAAE;GACP,uBAAuB,CAS5B;AAGD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAYxB,CAAA;AAVG;IADC,KAAK,EAAE;;oDACS;AAGjB;IADC,KAAK,EAAE;;oDACQ;AAGhB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,uBAAuB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACzB;AAGlC;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACtB;AAXlB,mBAAmB;IADxB,UAAU,EAAE;GACP,mBAAmB,CAYxB;AAED,sCAAsC;AAGtC,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CAS9B,CAAA;AAPG;IADC,KAAK,EAAE;;kEACgB;AAGxB;IADC,KAAK,EAAE;;uEACqB;AAG7B;IADC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6DACL;AARnB,yBAAyB;IAD9B,UAAU,EAAE;GACP,yBAAyB,CAS9B;AAGD,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;CAe9B,CAAA;AAbG;IADC,KAAK,EAAE;;mEACiB;AAGzB;IADC,KAAK,EAAE;;kEACgB;AAGxB;IADC,KAAK,EAAE;;mEACiB;AAGzB;IADC,KAAK,EAAE;;8DACa;AAGrB;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,yBAAyB,CAAC,CAAC;;gEACE;AAdzC,yBAAyB;IAD9B,UAAU,EAAE;GACP,yBAAyB,CAe9B;AAGD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAYxB,CAAA;AAVG;IADC,KAAK,EAAE;;oDACS;AAGjB;IADC,KAAK,EAAE;;oDACQ;AAGhB;IADC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8DACC;AAG3B;IADC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,yBAAyB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2DAChB;AAX3C,mBAAmB;IADxB,UAAU,EAAE;GACP,mBAAmB,CAYxB;AAED,mBAAmB;AAEnB;;;;GAIG;AAEI,IAAM,4BAA4B,GAAlC,MAAM,4BAA6B,SAAQ,YAAY;IAE1D;;OAEG;IAEG,AAAN,KAAK,CAAC,0BAA0B,CACC,oBAA4B,EAClD,GAAe;QAEtB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAElG,qEAAqE;YACrE,kFAAkF;YAClF,MAAM,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CACA,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAEhE,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,cAAc,OAAO,CAAC,MAAM,UAAU;gBAC/C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,uBAAuB,EAAE,CAAC,CAAC,uBAAuB;oBAClD,aAAa,EAAE,CAAC,CAAC,aAAa;iBACjC,CAAC,CAAC;aACN,CAAC;QACN,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IAED;;OAEG;IAEG,AAAN,KAAK,CAAC,yBAAyB,CACE,oBAA4B,EACtC,UAAkB,EAC9B,GAAe;QAEtB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAElG,qEAAqE;YACrE,MAAM,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CACc,CAAC;YAC7E,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,kBAAkB,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;YAE1E,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,cAAc,MAAM,CAAC,MAAM,eAAe,UAAU,GAAG;gBAChE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;iBAC3B,CAAC,CAAC;aACN,CAAC;QACN,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IAED;;OAEG;IAEG,AAAN,KAAK,CAAC,yBAAyB,CACE,oBAA4B,EAClD,GAAe;QAEtB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAElG,qEAAqE;YACrE,MAAM,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CACA,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAE9D,OAAO;gBACH,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,aAAa,EAAE,MAAM,CAAC,aAAa;aACtC,CAAC;QACN,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,CAAU,CAAC;YACzB,QAAQ,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;YACtD,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;aACrC,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;OAGG;IAEG,AAAN,KAAK,CAAC,2BAA2B,CACA,oBAA4B,EAClD,GAAe;QAEtB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAE9E,MAAM,MAAM,GAAG,SAAS,CAAC,uBAAuB,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,yDAAyD;iBACrE,CAAC;YACN,CAAC;YAED,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,8BAA8B,MAAM,CAAC,cAAc,CAAC,MAAM,UAAU;gBAC7E,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5C,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;oBACpC,eAAe,EAAE,CAAC,CAAC,eAAe;oBAClC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;oBACpC,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACrC,eAAe,EAAE,CAAC,CAAC,eAAe;wBAClC,oBAAoB,EAAE,CAAC,CAAC,oBAAoB;wBAC5C,UAAU,EAAE,CAAC,CAAC,UAAU;qBAC3B,CAAC,CAAC;iBACN,CAAC,CAAC;aACN,CAAC;QACN,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,CAAU,CAAC;YACzB,QAAQ,CAAC,sCAAsC,KAAK,EAAE,CAAC,CAAC;YACxD,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;aACrC,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;OAGG;IAEG,AAAN,KAAK,CAAC,wBAAwB,CACG,oBAA4B,EACP,OAAmC,EACrC,QAAgB,EACzD,GAAe;QAEtB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAElG,6CAA6C;YAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CACF,CAAC;YAC3D,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAEhE,mCAAmC;YACnC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACrE,MAAM,cAAc,GAAqB;gBACrC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;aAChF,CAAC;YAEF,uDAAuD;YACvD,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,QAAsC,CAAC,CAAC;YAE/G,oBAAoB;YACpB,MAAM,KAAK,GAAuB;gBAC9B,YAAY,EAAE,cAAc;gBAC5B,aAAa,EAAE,aAAa;gBAC5B,QAAQ,EAAE,QAAsC;gBAChD,SAAS,EAAE,OAAO;gBAClB,UAAU,EAAE,kBAAkB,CAAC,WAAW;gBAC1C,wBAAwB,EAAE,2BAA2B;gBACrD,aAAa,EAAE,eAAe;gBAC9B,WAAW,EAAE,UAAU;gBACvB,cAAc,EAAE,EAAE;gBAClB,wBAAwB,EAAE,EAAE;aAC/B,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,6BAA6B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAChE,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC5B,CAAC;YACN,CAAC;YAED,MAAM,QAAQ,GAAG;gBACb,GAAG,MAAM,CAAC,cAAc;gBACxB,GAAG,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,MAAM,CAAC,aAAa;aAC1B,CAAC;YAEF,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,aAAa,QAAQ,CAAC,MAAM,QAAQ;gBAC7C,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,WAAW,EAAE,CAAC,CAAC,WAAW;iBAC7B,CAAC,CAAC;gBACH,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;aACrE,CAAC;QACN,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,CAAU,CAAC;YACzB,QAAQ,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;YACrD,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;aACrC,CAAC;QACN,CAAC;IACL,CAAC;IAED;;;OAGG;IAEG,AAAN,KAAK,CAAC,sBAAsB,CACK,oBAA4B,EACtC,UAAkB,EACF,KAAa,EACzC,GAAe;QAEtB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAElG,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CACsF,CAAC;YAEjJ,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAC9B,kBAAkB,EAAE,kBAAkB;gBACtC,UAAU,EAAE,UAAU;gBACtB,cAAc,EAAE,IAAI;gBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC9B,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;YAEH,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,kBAAkB;gBAC3D,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC9B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;iBACjC,CAAC,CAAC;aACN,CAAC;QACN,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,CAAU,CAAC;YACzB,QAAQ,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;YACnD,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;aACrC,CAAC;QACN,CAAC;IACL,CAAC;IAED,0BAA0B;IAElB,kBAAkB,CACtB,OAAmC,EACnC,YAA8B,EAC9B,QAAoC;QAEpC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAEhC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACrB,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC1F,MAAM,OAAO,GAAyB,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtE,eAAe,EAAE,CAAC,CAAC,IAAI;gBACvB,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;gBACvD,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC9D,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU;gBACzB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,YAAY,EAAE,CAAC,CAAC,YAAY;aAC/B,CAAC,CAAC,CAAC;YAEJ,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC;iBAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;iBAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;YAErD,OAAO;gBACH,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;gBACtC,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,OAAO,EAAE,OAAO;gBAChB,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzE,eAAe,EAAE,EAAE;aACtB,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,oBAAoB,CAAC,GAAe;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,gBAAgB,CAC1B,oBAA4B,EAC5B,WAAqB;QAErB,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE1B,qCAAqC;QACrC,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC,eAAe,CAC/C,0BAA0B,EAC1B,WAAW,CACd,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,+BAA+B,oBAAoB,aAAa,CAAC,CAAC;QACtF,CAAC;QAED,qCAAqC;QACrC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,eAAe,CACxC,kBAAkB,EAClB,WAAW,CACd,CAAC;QACF,MAAM,iBAAiB,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACnF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,wBAAwB,kBAAkB,CAAC,aAAa,aAAa,CAAC,CAAC;QAC3F,CAAC;QAED,sFAAsF;QACtF,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CACtC,WAAwE,CAC3E,CAAC;QAEF,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAC7C,CAAC;IAEO,oBAAoB,CAAC,CAAU;QACnC,MAAM,KAAK,GAAG,CAAU,CAAC;QACzB,QAAQ,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;QAClD,OAAO;YACH,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;SACrC,CAAC;IACN,CAAC;CACJ,CAAA;AA3WS;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC;IAE9B,WAAA,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC3B,WAAA,GAAG,EAAE,CAAA;;;;8EAyBT;AAMK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC;IAE7B,WAAA,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC3B,WAAA,GAAG,CAAC,YAAY,CAAC,CAAA;IACjB,WAAA,GAAG,EAAE,CAAA;;;;6EA0BT;AAMK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC;IAE7B,WAAA,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC3B,WAAA,GAAG,EAAE,CAAA;;;;6EAwBT;AAOK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC;IAE5B,WAAA,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC3B,WAAA,GAAG,EAAE,CAAA;;;;+EAsCT;AAOK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC;IAE5B,WAAA,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC3B,WAAA,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAA;IAChD,WAAA,GAAG,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAA;IAC9C,WAAA,GAAG,EAAE,CAAA;;;;4EAqET;AAOK;IADL,KAAK,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC;IAE1B,WAAA,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC3B,WAAA,GAAG,CAAC,YAAY,CAAC,CAAA;IACjB,WAAA,GAAG,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAA;IACjC,WAAA,GAAG,EAAE,CAAA;;;;0EAgCT;AA9QQ,4BAA4B;IADxC,QAAQ,EAAE;GACE,4BAA4B,CAiXxC"}
@@ -58,7 +58,9 @@ export declare class RESTEndpointHandler {
58
58
  */
59
59
  private checkEntityAccess;
60
60
  /**
61
- * Middleware to extract MJ user from request
61
+ * Guard middleware: verifies that the unified auth middleware (or a custom
62
+ * per-route authMiddleware) has already set req['mjUser'] to a UserInfo.
63
+ * Does NOT overwrite the value — just returns 401 if it is missing.
62
64
  */
63
65
  private extractMJUser;
64
66
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"RESTEndpointHandler.d.ts","sourceRoot":"","sources":["../../src/rest/RESTEndpointHandler.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAS9B;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAA6B;gBAEhC,OAAO,GAAE,0BAA+B;IAMpD;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAqEvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAqDnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;YACW,aAAa;IA2B3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;YACW,cAAc;IAwB5B;;OAEG;YACW,aAAa;IAyB3B;;OAEG;YACW,SAAS;IAsBvB;;OAEG;YACW,YAAY;IAuB1B;;OAEG;YACW,YAAY;IAwB1B;;OAEG;YACW,YAAY;IA2B1B;;OAEG;YACW,gBAAgB;IAyB9B;;OAEG;YACW,qBAAqB;IAyBnC;;OAEG;YACW,mBAAmB;IAwBjC;;OAEG;YACW,OAAO;IA0BrB;;OAEG;YACW,QAAQ;IAoCtB;;OAEG;YACW,aAAa;IAoB3B;;OAEG;YACW,iBAAiB;IAoC/B;;OAEG;YACW,sBAAsB;IAyCpC;;OAEG;YACW,gBAAgB;IAiB9B;;OAEG;YACW,uBAAuB;IAyBrC;;OAEG;YACW,uBAAuB;IAyBrC;;OAEG;YACW,0BAA0B;IAyBxC;;OAEG;YACW,kBAAkB;IAUhC;;OAEG;YACW,SAAS;IAUvB;;OAEG;YACW,QAAQ;IAUtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACI,SAAS,IAAI,OAAO,CAAC,MAAM;CAGrC"}
1
+ {"version":3,"file":"RESTEndpointHandler.d.ts","sourceRoot":"","sources":["../../src/rest/RESTEndpointHandler.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAS9B;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAA6B;gBAEhC,OAAO,GAAE,0BAA+B;IAMpD;;;OAGG;IACH,OAAO,CAAC,cAAc;IAOtB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAqEvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAqDnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;YACW,cAAc;IAsB5B;;OAEG;YACW,aAAa;IAyB3B;;OAEG;YACW,SAAS;IAsBvB;;OAEG;YACW,YAAY;IAuB1B;;OAEG;YACW,YAAY;IAwB1B;;OAEG;YACW,YAAY;IA2B1B;;OAEG;YACW,gBAAgB;IAyB9B;;OAEG;YACW,qBAAqB;IAyBnC;;OAEG;YACW,mBAAmB;IAwBjC;;OAEG;YACW,OAAO;IA0BrB;;OAEG;YACW,QAAQ;IAoCtB;;OAEG;YACW,aAAa;IAoB3B;;OAEG;YACW,iBAAiB;IAoC/B;;OAEG;YACW,sBAAsB;IAyCpC;;OAEG;YACW,gBAAgB;IAiB9B;;OAEG;YACW,uBAAuB;IAyBrC;;OAEG;YACW,uBAAuB;IAyBrC;;OAEG;YACW,0BAA0B;IAyBxC;;OAEG;YACW,kBAAkB;IAUhC;;OAEG;YACW,SAAS;IAUvB;;OAEG;YACW,QAAQ;IAUtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACI,SAAS,IAAI,OAAO,CAAC,MAAM;CAGrC"}