@memberjunction/server 5.28.0 → 5.30.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 (57) hide show
  1. package/dist/auth/newUsers.d.ts.map +1 -1
  2. package/dist/auth/newUsers.js +63 -70
  3. package/dist/auth/newUsers.js.map +1 -1
  4. package/dist/config.d.ts +151 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +15 -0
  7. package/dist/config.js.map +1 -1
  8. package/dist/generated/generated.d.ts +452 -6
  9. package/dist/generated/generated.d.ts.map +1 -1
  10. package/dist/generated/generated.js +2788 -303
  11. package/dist/generated/generated.js.map +1 -1
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/resolvers/FeedbackResolver.d.ts +150 -0
  17. package/dist/resolvers/FeedbackResolver.d.ts.map +1 -0
  18. package/dist/resolvers/FeedbackResolver.js +876 -0
  19. package/dist/resolvers/FeedbackResolver.js.map +1 -0
  20. package/dist/resolvers/FileResolver.d.ts +27 -0
  21. package/dist/resolvers/FileResolver.d.ts.map +1 -1
  22. package/dist/resolvers/FileResolver.js +32 -3
  23. package/dist/resolvers/FileResolver.js.map +1 -1
  24. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +100 -1
  25. package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
  26. package/dist/resolvers/IntegrationDiscoveryResolver.js +532 -41
  27. package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
  28. package/dist/resolvers/MCPResolver.d.ts +77 -0
  29. package/dist/resolvers/MCPResolver.d.ts.map +1 -1
  30. package/dist/resolvers/MCPResolver.js +300 -1
  31. package/dist/resolvers/MCPResolver.js.map +1 -1
  32. package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
  33. package/dist/resolvers/RunAIAgentResolver.js +87 -32
  34. package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
  35. package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
  36. package/dist/resolvers/SyncDataResolver.js +20 -12
  37. package/dist/resolvers/SyncDataResolver.js.map +1 -1
  38. package/dist/resolvers/SyncRolesUsersResolver.d.ts +20 -9
  39. package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
  40. package/dist/resolvers/SyncRolesUsersResolver.js +153 -116
  41. package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
  42. package/dist/services/TaskOrchestrator.d.ts.map +1 -1
  43. package/dist/services/TaskOrchestrator.js +78 -79
  44. package/dist/services/TaskOrchestrator.js.map +1 -1
  45. package/package.json +68 -66
  46. package/src/auth/newUsers.ts +65 -74
  47. package/src/config.ts +19 -0
  48. package/src/generated/generated.ts +1753 -40
  49. package/src/index.ts +1 -0
  50. package/src/resolvers/FeedbackResolver.ts +940 -0
  51. package/src/resolvers/FileResolver.ts +33 -4
  52. package/src/resolvers/IntegrationDiscoveryResolver.ts +543 -43
  53. package/src/resolvers/MCPResolver.ts +297 -1
  54. package/src/resolvers/RunAIAgentResolver.ts +89 -32
  55. package/src/resolvers/SyncDataResolver.ts +24 -14
  56. package/src/resolvers/SyncRolesUsersResolver.ts +177 -141
  57. package/src/services/TaskOrchestrator.ts +86 -93
@@ -368,9 +368,21 @@ export class FileResolver extends FileResolverBase {
368
368
  return { account, provider };
369
369
  }
370
370
 
371
+ /**
372
+ * Legacy file upload path — used by the `<mj-files-file-upload>` Angular component.
373
+ * Creates a File entity record in the database AND generates a pre-authenticated upload URL.
374
+ * The client then PUTs the file binary directly to that URL.
375
+ *
376
+ * Driver initialization: uses `buildUserContext()` (no storage account). The driver
377
+ * initializes from environment variables (e.g. STORAGE_AZURE_ACCOUNT_NAME, STORAGE_DROPBOX_ACCESS_TOKEN).
378
+ *
379
+ * Input: `ProviderID` identifies which storage provider to use.
380
+ * Returns: `{ File, UploadUrl, NameExists }` — the persisted File record, upload URL, and duplicate check.
381
+ *
382
+ * @see CreatePreAuthUploadUrl for the enterprise storage-account-based path (used by File Browser).
383
+ */
371
384
  @Mutation(() => CreateFilePayload)
372
385
  async CreateFile(@Arg('input', () => CreateMJFileInput) input: CreateMJFileInput, @Ctx() context: AppContext, @PubSub() pubSub: PubSubEngine) {
373
- // Check to see if there's already an object with that name
374
386
  const provider = GetReadOnlyProvider(context.providers, { allowFallbackToReadWrite: true });
375
387
  const user = this.GetUserFromPayload(context.userPayload);
376
388
  const fileEntity = await provider.GetEntityObject<MJFileEntity>('MJ: Files', user);
@@ -389,12 +401,15 @@ export class FileResolver extends FileResolverBase {
389
401
 
390
402
  // Create the upload URL and get the record updates (provider key, content type, etc)
391
403
  const userContext = this.buildUserContext(context);
392
- const { updatedInput, UploadUrl } = await createUploadUrl(providerEntity, fileEntity, userContext);
404
+ const { updatedInput, UploadUrl } = await createUploadUrl(providerEntity, fileEntity as unknown as { ID: string; Name: string; ProviderID: string; ContentType?: string; ProviderKey?: string }, userContext);
393
405
 
394
406
  // Save the file record with the updated input
395
407
  const mapper = new FieldMapper();
396
- fileEntity.SetMany(mapper.ReverseMapFields({ ...updatedInput }), true, true);
397
- await fileEntity.Save();
408
+ fileEntity.SetMany(mapper.ReverseMapFields({ ...updatedInput }), true, false);
409
+ const saved = await fileEntity.Save();
410
+ if (!saved) {
411
+ console.error('[CreateFile] File save failed:', fileEntity.LatestResult?.CompleteMessage);
412
+ }
398
413
  const File = mapper.MapFields({ ...fileEntity.GetAll() });
399
414
 
400
415
  return { File, UploadUrl, NameExists };
@@ -534,6 +549,20 @@ export class FileResolver extends FileResolverBase {
534
549
  return downloadUrl;
535
550
  }
536
551
 
552
+ /**
553
+ * Enterprise file upload path — used by the File Browser UI.
554
+ * Generates a pre-authenticated upload URL only (does NOT create a File entity record).
555
+ * The client handles the upload directly to the storage provider via the returned URL.
556
+ *
557
+ * Driver initialization: uses `buildExtendedUserContext()` with a FileStorageAccount entity.
558
+ * Credentials are loaded from the Credential Engine (encrypted in the database), with
559
+ * automatic token refresh for OAuth providers like Dropbox and Box.com.
560
+ *
561
+ * Input: `AccountID` identifies which storage account (and its linked provider/credentials) to use.
562
+ * Returns: `{ UploadUrl, ProviderKey }` — the pre-authenticated URL and optional provider key.
563
+ *
564
+ * @see CreateFile for the legacy path that also creates a File entity record.
565
+ */
537
566
  @Mutation(() => CreatePreAuthUploadUrlPayload)
538
567
  async CreatePreAuthUploadUrl(@Arg('input', () => CreatePreAuthUploadUrlInput) input: CreatePreAuthUploadUrlInput, @Ctx() context: AppContext) {
539
568
  const md = GetReadOnlyProvider(context.providers, { allowFallbackToReadWrite: true });