@memberjunction/graphql-dataprovider 3.1.1 → 3.3.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.
package/dist/index.d.mts CHANGED
@@ -544,6 +544,15 @@ declare class GraphQLProviderConfigData extends ProviderConfigDataBase {
544
544
  */
545
545
  get MJAPIKey(): string;
546
546
  set MJAPIKey(key: string);
547
+ /**
548
+ * This optional parameter is used when authenticating with a MemberJunction user API key (format: mj_sk_*).
549
+ * When provided, it will be sent in the X-API-Key header. This authenticates as the specific user who owns the API key.
550
+ *
551
+ * Unlike MJAPIKey (system key), this is a user-specific key that can be used for automated access on behalf of a user.
552
+ * Use this when you want to make API calls as a specific user without requiring OAuth authentication.
553
+ */
554
+ get UserAPIKey(): string;
555
+ set UserAPIKey(key: string);
547
556
  /**
548
557
  * URL is the URL to the GraphQL endpoint
549
558
  */
@@ -566,8 +575,9 @@ declare class GraphQLProviderConfigData extends ProviderConfigDataBase {
566
575
  * @param includeSchemas optional, an array of schema names to include in the metadata. If not passed, all schemas are included
567
576
  * @param excludeSchemas optional, an array of schema names to exclude from the metadata. If not passed, no schemas are excluded
568
577
  * @param mjAPIKey optional, a shared secret key that is static and provided by the publisher of the MJAPI server.
578
+ * @param userAPIKey optional, a user-specific API key (mj_sk_* format) for authenticating as a specific user
569
579
  */
570
- constructor(token: string, url: string, wsurl: string, refreshTokenFunction: RefreshTokenFunction, MJCoreSchemaName?: string, includeSchemas?: string[], excludeSchemas?: string[], mjAPIKey?: string);
580
+ constructor(token: string, url: string, wsurl: string, refreshTokenFunction: RefreshTokenFunction, MJCoreSchemaName?: string, includeSchemas?: string[], excludeSchemas?: string[], mjAPIKey?: string, userAPIKey?: string);
571
581
  }
572
582
  /**
573
583
  * The GraphQLDataProvider class is a data provider for MemberJunction that implements the IEntityDataProvider, IMetadataProvider, IRunViewProvider, IRunReportProvider, IRunQueryProvider interfaces and connects to the
@@ -763,7 +773,7 @@ declare class GraphQLDataProvider extends ProviderBase implements IEntityDataPro
763
773
  RefreshToken(): Promise<void>;
764
774
  private performTokenRefresh;
765
775
  static RefreshToken(): Promise<void>;
766
- protected CreateNewGraphQLClient(url: string, token: string, sessionId: string, mjAPIKey: string): GraphQLClient;
776
+ protected CreateNewGraphQLClient(url: string, token: string, sessionId: string, mjAPIKey: string, userAPIKey?: string): GraphQLClient;
767
777
  private _innerCurrentUserQueryString;
768
778
  private _currentUserQuery;
769
779
  private userInfoString;
@@ -2222,6 +2232,157 @@ declare class GraphQLActionClient {
2222
2232
  private handleEntityActionError;
2223
2233
  }
2224
2234
 
2235
+ /**
2236
+ * Result of creating an API key
2237
+ */
2238
+ interface CreateAPIKeyResult {
2239
+ /** Whether the operation succeeded */
2240
+ Success: boolean;
2241
+ /** The raw API key - show once and cannot be recovered */
2242
+ RawKey?: string;
2243
+ /** The database ID of the created key */
2244
+ APIKeyID?: string;
2245
+ /** Error message if operation failed */
2246
+ Error?: string;
2247
+ }
2248
+ /**
2249
+ * Parameters for creating an API key
2250
+ */
2251
+ interface CreateAPIKeyParams {
2252
+ /** Human-readable label for the key */
2253
+ Label: string;
2254
+ /** Optional description */
2255
+ Description?: string;
2256
+ /** Optional expiration date */
2257
+ ExpiresAt?: Date;
2258
+ /** Optional scope IDs to assign */
2259
+ ScopeIDs?: string[];
2260
+ }
2261
+ /**
2262
+ * Result of revoking an API key
2263
+ */
2264
+ interface RevokeAPIKeyResult {
2265
+ /** Whether the operation succeeded */
2266
+ Success: boolean;
2267
+ /** Error message if operation failed */
2268
+ Error?: string;
2269
+ }
2270
+ /**
2271
+ * Client for encryption-related GraphQL operations.
2272
+ *
2273
+ * This client provides methods for operations that require server-side
2274
+ * cryptographic processing, such as API key generation. These operations
2275
+ * cannot be performed client-side because they require secure random
2276
+ * number generation and cryptographic hashing that must match the
2277
+ * server's validation logic.
2278
+ *
2279
+ * @example
2280
+ * ```typescript
2281
+ * // Create the client
2282
+ * const encryptionClient = new GraphQLEncryptionClient(graphQLProvider);
2283
+ *
2284
+ * // Create a new API key
2285
+ * const result = await encryptionClient.CreateAPIKey({
2286
+ * Label: 'My Integration Key',
2287
+ * Description: 'Used for external service access',
2288
+ * ExpiresAt: new Date('2025-12-31'),
2289
+ * ScopeIDs: ['scope-id-1', 'scope-id-2']
2290
+ * });
2291
+ *
2292
+ * if (result.Success) {
2293
+ * // Show rawKey to user ONCE - cannot be recovered
2294
+ * console.log('Save this key:', result.RawKey);
2295
+ * }
2296
+ * ```
2297
+ */
2298
+ declare class GraphQLEncryptionClient {
2299
+ /**
2300
+ * The GraphQLDataProvider instance used to execute GraphQL requests
2301
+ */
2302
+ private _dataProvider;
2303
+ /**
2304
+ * Creates a new GraphQLEncryptionClient instance.
2305
+ * @param dataProvider The GraphQL data provider to use for queries
2306
+ */
2307
+ constructor(dataProvider: GraphQLDataProvider);
2308
+ /**
2309
+ * Creates a new API key with secure server-side cryptographic hashing.
2310
+ *
2311
+ * This method calls the server to:
2312
+ * 1. Generate a cryptographically secure random API key
2313
+ * 2. Hash the key using SHA-256 for secure storage
2314
+ * 3. Store only the hash in the database
2315
+ * 4. Return the raw key ONCE
2316
+ *
2317
+ * **CRITICAL**: The raw key is returned only once and cannot be recovered.
2318
+ * Instruct users to save it immediately in a secure location.
2319
+ *
2320
+ * @param params Configuration for the new API key
2321
+ * @returns Result with raw key (show once!) and database ID
2322
+ *
2323
+ * @example
2324
+ * ```typescript
2325
+ * const result = await client.CreateAPIKey({
2326
+ * Label: 'Production Integration',
2327
+ * Description: 'API access for our CRM system',
2328
+ * ExpiresAt: new Date('2025-12-31'),
2329
+ * ScopeIDs: ['entities:read', 'entities:write']
2330
+ * });
2331
+ *
2332
+ * if (result.Success) {
2333
+ * alert(`Save this key now! It won't be shown again:\n${result.RawKey}`);
2334
+ * } else {
2335
+ * console.error('Failed to create key:', result.Error);
2336
+ * }
2337
+ * ```
2338
+ */
2339
+ CreateAPIKey(params: CreateAPIKeyParams): Promise<CreateAPIKeyResult>;
2340
+ /**
2341
+ * Creates the variables for the CreateAPIKey mutation
2342
+ * @param params The API key creation parameters
2343
+ * @returns The mutation variables
2344
+ */
2345
+ private createAPIKeyVariables;
2346
+ /**
2347
+ * Executes the CreateAPIKey mutation
2348
+ * @param variables The mutation variables
2349
+ * @returns The GraphQL result
2350
+ */
2351
+ private executeCreateAPIKeyMutation;
2352
+ /**
2353
+ * Processes the result of the CreateAPIKey mutation
2354
+ * @param result The GraphQL result
2355
+ * @returns The processed result
2356
+ */
2357
+ private processCreateAPIKeyResult;
2358
+ /**
2359
+ * Handles errors in the CreateAPIKey operation
2360
+ * @param e The error
2361
+ * @returns An error result
2362
+ */
2363
+ private handleCreateAPIKeyError;
2364
+ /**
2365
+ * Revokes an API key, permanently disabling it.
2366
+ *
2367
+ * Once revoked, an API key cannot be reactivated. Users must create a new key.
2368
+ *
2369
+ * @param apiKeyId The database ID of the API key to revoke
2370
+ * @returns Result indicating success or failure
2371
+ *
2372
+ * @example
2373
+ * ```typescript
2374
+ * const result = await client.RevokeAPIKey('key-uuid-here');
2375
+ *
2376
+ * if (result.Success) {
2377
+ * console.log('API key has been revoked');
2378
+ * } else {
2379
+ * console.error('Failed to revoke:', result.Error);
2380
+ * }
2381
+ * ```
2382
+ */
2383
+ RevokeAPIKey(apiKeyId: string): Promise<RevokeAPIKeyResult>;
2384
+ }
2385
+
2225
2386
  /**
2226
2387
  * Parameters for running a test
2227
2388
  */
@@ -2810,6 +2971,319 @@ declare class GraphQLComponentRegistryClient {
2810
2971
  SendComponentFeedback(params: ComponentFeedbackParams): Promise<ComponentFeedbackResponse>;
2811
2972
  }
2812
2973
 
2974
+ /**
2975
+ * Client for file storage operations through GraphQL.
2976
+ * This class provides an easy way to interact with file storage accounts from a client application.
2977
+ *
2978
+ * All operations use accountId (FileStorageAccount ID) as the primary identifier,
2979
+ * supporting the enterprise model where storage accounts are organizational resources.
2980
+ *
2981
+ * @example
2982
+ * ```typescript
2983
+ * // Create the client
2984
+ * const storageClient = new GraphQLFileStorageClient(graphQLProvider);
2985
+ *
2986
+ * // List objects in a directory
2987
+ * const objects = await storageClient.ListObjects(accountId, 'documents/');
2988
+ *
2989
+ * // Create a pre-authenticated upload URL
2990
+ * const uploadResult = await storageClient.CreatePreAuthUploadUrl(
2991
+ * accountId,
2992
+ * 'documents/report.pdf',
2993
+ * 'application/pdf'
2994
+ * );
2995
+ * ```
2996
+ */
2997
+ declare class GraphQLFileStorageClient {
2998
+ /**
2999
+ * The GraphQLDataProvider instance used to execute GraphQL requests
3000
+ * @private
3001
+ */
3002
+ private _dataProvider;
3003
+ /**
3004
+ * Creates a new GraphQLFileStorageClient instance.
3005
+ * @param dataProvider The GraphQL data provider to use for queries
3006
+ */
3007
+ constructor(dataProvider: GraphQLDataProvider);
3008
+ /**
3009
+ * List objects in a storage account at the specified path.
3010
+ *
3011
+ * @param accountId The ID of the FileStorageAccount
3012
+ * @param prefix The path prefix to list objects from (e.g., 'documents/')
3013
+ * @param delimiter Optional delimiter for grouping results (default: '/')
3014
+ * @returns A Promise that resolves to a StorageListResult
3015
+ *
3016
+ * @example
3017
+ * ```typescript
3018
+ * const result = await storageClient.ListObjects(accountId, 'documents/', '/');
3019
+ * console.log('Files:', result.objects.filter(o => !o.isDirectory));
3020
+ * console.log('Folders:', result.prefixes);
3021
+ * ```
3022
+ */
3023
+ ListObjects(accountId: string, prefix?: string, delimiter?: string): Promise<StorageListResult>;
3024
+ /**
3025
+ * Check if a directory exists in the storage account.
3026
+ *
3027
+ * @param accountId The ID of the FileStorageAccount
3028
+ * @param path The directory path to check
3029
+ * @returns A Promise that resolves to true if the directory exists
3030
+ */
3031
+ DirectoryExists(accountId: string, path: string): Promise<boolean>;
3032
+ /**
3033
+ * Create a directory in the storage account.
3034
+ *
3035
+ * @param accountId The ID of the FileStorageAccount
3036
+ * @param path The directory path to create
3037
+ * @returns A Promise that resolves to true if the directory was created successfully
3038
+ */
3039
+ CreateDirectory(accountId: string, path: string): Promise<boolean>;
3040
+ /**
3041
+ * Check if an object exists in the storage account.
3042
+ *
3043
+ * @param accountId The ID of the FileStorageAccount
3044
+ * @param objectName The name/path of the object to check
3045
+ * @returns A Promise that resolves to true if the object exists
3046
+ */
3047
+ ObjectExists(accountId: string, objectName: string): Promise<boolean>;
3048
+ /**
3049
+ * Create a pre-authenticated URL for uploading a file.
3050
+ *
3051
+ * @param accountId The ID of the FileStorageAccount
3052
+ * @param objectName The name/path of the object to upload
3053
+ * @param contentType Optional content type for the file
3054
+ * @returns A Promise that resolves to the upload URL and provider key
3055
+ *
3056
+ * @example
3057
+ * ```typescript
3058
+ * const result = await storageClient.CreatePreAuthUploadUrl(
3059
+ * accountId,
3060
+ * 'documents/report.pdf',
3061
+ * 'application/pdf'
3062
+ * );
3063
+ *
3064
+ * // Use the upload URL to upload the file
3065
+ * await fetch(result.uploadUrl, {
3066
+ * method: 'PUT',
3067
+ * body: fileContent,
3068
+ * headers: { 'Content-Type': 'application/pdf' }
3069
+ * });
3070
+ * ```
3071
+ */
3072
+ CreatePreAuthUploadUrl(accountId: string, objectName: string, contentType?: string): Promise<CreatePreAuthUploadUrlResult>;
3073
+ /**
3074
+ * Create a pre-authenticated URL for downloading a file.
3075
+ *
3076
+ * @param accountId The ID of the FileStorageAccount
3077
+ * @param objectName The name/path of the object to download
3078
+ * @returns A Promise that resolves to the download URL
3079
+ *
3080
+ * @example
3081
+ * ```typescript
3082
+ * const downloadUrl = await storageClient.CreatePreAuthDownloadUrl(
3083
+ * accountId,
3084
+ * 'documents/report.pdf'
3085
+ * );
3086
+ *
3087
+ * // Use the download URL
3088
+ * window.open(downloadUrl, '_blank');
3089
+ * ```
3090
+ */
3091
+ CreatePreAuthDownloadUrl(accountId: string, objectName: string): Promise<string>;
3092
+ /**
3093
+ * Delete an object from the storage account.
3094
+ *
3095
+ * @param accountId The ID of the FileStorageAccount
3096
+ * @param objectName The name/path of the object to delete
3097
+ * @returns A Promise that resolves to true if the object was deleted successfully
3098
+ */
3099
+ DeleteObject(accountId: string, objectName: string): Promise<boolean>;
3100
+ /**
3101
+ * Move/rename an object within the storage account.
3102
+ *
3103
+ * @param accountId The ID of the FileStorageAccount
3104
+ * @param oldName The current name/path of the object
3105
+ * @param newName The new name/path for the object
3106
+ * @returns A Promise that resolves to true if the object was moved successfully
3107
+ */
3108
+ MoveObject(accountId: string, oldName: string, newName: string): Promise<boolean>;
3109
+ /**
3110
+ * Copy an object within the storage account.
3111
+ *
3112
+ * @param accountId The ID of the FileStorageAccount
3113
+ * @param sourceName The source name/path of the object
3114
+ * @param destinationName The destination name/path for the copy
3115
+ * @returns A Promise that resolves to true if the object was copied successfully
3116
+ */
3117
+ CopyObject(accountId: string, sourceName: string, destinationName: string): Promise<boolean>;
3118
+ /**
3119
+ * Copy an object between two different storage accounts.
3120
+ *
3121
+ * @param sourceAccountId The ID of the source FileStorageAccount
3122
+ * @param destinationAccountId The ID of the destination FileStorageAccount
3123
+ * @param sourcePath The source path of the object
3124
+ * @param destinationPath The destination path for the copy
3125
+ * @returns A Promise that resolves to the copy result
3126
+ */
3127
+ CopyObjectBetweenAccounts(sourceAccountId: string, destinationAccountId: string, sourcePath: string, destinationPath: string): Promise<CopyBetweenAccountsResult>;
3128
+ /**
3129
+ * Search for files across one or more storage accounts.
3130
+ *
3131
+ * @param accountIds Array of FileStorageAccount IDs to search
3132
+ * @param query The search query
3133
+ * @param options Optional search options
3134
+ * @returns A Promise that resolves to the search results
3135
+ *
3136
+ * @example
3137
+ * ```typescript
3138
+ * const results = await storageClient.SearchFiles(
3139
+ * [accountId1, accountId2],
3140
+ * 'quarterly report',
3141
+ * {
3142
+ * maxResultsPerAccount: 10,
3143
+ * fileTypes: ['pdf', 'docx'],
3144
+ * searchContent: true
3145
+ * }
3146
+ * );
3147
+ *
3148
+ * for (const accountResult of results.accountResults) {
3149
+ * console.log(`Results from ${accountResult.accountName}:`);
3150
+ * for (const file of accountResult.results) {
3151
+ * console.log(` - ${file.name} (${file.relevance})`);
3152
+ * }
3153
+ * }
3154
+ * ```
3155
+ */
3156
+ SearchFiles(accountIds: string[], searchQuery: string, options?: FileSearchOptions): Promise<SearchAcrossAccountsResult>;
3157
+ }
3158
+ /**
3159
+ * Metadata for a storage object
3160
+ */
3161
+ interface StorageObjectMetadata {
3162
+ /** The name of the object (filename) */
3163
+ name: string;
3164
+ /** The path to the object (directory) */
3165
+ path: string;
3166
+ /** The full path including name */
3167
+ fullPath: string;
3168
+ /** Size in bytes */
3169
+ size: number;
3170
+ /** MIME content type */
3171
+ contentType: string;
3172
+ /** Last modification date */
3173
+ lastModified: Date;
3174
+ /** Whether this is a directory */
3175
+ isDirectory: boolean;
3176
+ /** ETag for caching */
3177
+ etag?: string;
3178
+ /** Cache control header */
3179
+ cacheControl?: string;
3180
+ }
3181
+ /**
3182
+ * Result from listing storage objects
3183
+ */
3184
+ interface StorageListResult {
3185
+ /** Array of objects in the directory */
3186
+ objects: StorageObjectMetadata[];
3187
+ /** Array of subdirectory prefixes */
3188
+ prefixes: string[];
3189
+ }
3190
+ /**
3191
+ * Result from creating a pre-authenticated upload URL
3192
+ */
3193
+ interface CreatePreAuthUploadUrlResult {
3194
+ /** The URL to use for uploading */
3195
+ uploadUrl: string;
3196
+ /** The provider-specific key for the object */
3197
+ providerKey?: string;
3198
+ }
3199
+ /**
3200
+ * Result from copying an object between accounts
3201
+ */
3202
+ interface CopyBetweenAccountsResult {
3203
+ /** Whether the copy was successful */
3204
+ success: boolean;
3205
+ /** Human-readable message */
3206
+ message: string;
3207
+ /** Number of bytes transferred */
3208
+ bytesTransferred?: number;
3209
+ /** Name of the source account */
3210
+ sourceAccount: string;
3211
+ /** Name of the destination account */
3212
+ destinationAccount: string;
3213
+ /** Source path */
3214
+ sourcePath: string;
3215
+ /** Destination path */
3216
+ destinationPath: string;
3217
+ }
3218
+ /**
3219
+ * Options for file search operations
3220
+ */
3221
+ interface FileSearchOptions {
3222
+ /** Maximum results per account */
3223
+ maxResultsPerAccount?: number;
3224
+ /** Filter by file types (extensions) */
3225
+ fileTypes?: string[];
3226
+ /** Whether to search file content (not just names) */
3227
+ searchContent?: boolean;
3228
+ }
3229
+ /**
3230
+ * A single file search result
3231
+ */
3232
+ interface FileSearchResult {
3233
+ /** Path to the file */
3234
+ path: string;
3235
+ /** File name */
3236
+ name: string;
3237
+ /** File size in bytes */
3238
+ size: number;
3239
+ /** MIME content type */
3240
+ contentType: string;
3241
+ /** Last modification date */
3242
+ lastModified: Date;
3243
+ /** Relevance score (0-1) */
3244
+ relevance?: number;
3245
+ /** Text excerpt showing the match */
3246
+ excerpt?: string;
3247
+ /** Whether the match was in the filename */
3248
+ matchInFilename?: boolean;
3249
+ /** Provider-specific object ID */
3250
+ objectId?: string;
3251
+ }
3252
+ /**
3253
+ * Search results for a single account
3254
+ */
3255
+ interface AccountSearchResult {
3256
+ /** The account ID */
3257
+ accountId: string;
3258
+ /** The account name */
3259
+ accountName: string;
3260
+ /** Whether the search was successful */
3261
+ success: boolean;
3262
+ /** Error message if search failed */
3263
+ errorMessage?: string;
3264
+ /** Search results */
3265
+ results: FileSearchResult[];
3266
+ /** Total matches found */
3267
+ totalMatches?: number;
3268
+ /** Whether there are more results */
3269
+ hasMore: boolean;
3270
+ /** Token for pagination */
3271
+ nextPageToken?: string;
3272
+ }
3273
+ /**
3274
+ * Result from searching across multiple accounts
3275
+ */
3276
+ interface SearchAcrossAccountsResult {
3277
+ /** Results grouped by account */
3278
+ accountResults: AccountSearchResult[];
3279
+ /** Total results returned across all accounts */
3280
+ totalResultsReturned: number;
3281
+ /** Number of accounts that were searched successfully */
3282
+ successfulAccounts: number;
3283
+ /** Number of accounts that failed to search */
3284
+ failedAccounts: number;
3285
+ }
3286
+
2813
3287
  /**
2814
3288
  * In-memory storage provider using nested Map structure for category isolation.
2815
3289
  * Used as a fallback when browser storage is not available.
@@ -2886,4 +3360,4 @@ declare class BrowserIndexedDBStorageProvider extends BrowserStorageProviderBase
2886
3360
  GetCategoryKeys(category: string): Promise<string[]>;
2887
3361
  }
2888
3362
 
2889
- export { ActionItemInput, ActionItemOutput, BrowserIndexedDBStorageProvider, BrowserStorageProviderBase, type ComponentDependencyTree, type ComponentSpecWithHash, type CreateQueryInput, type CreateQueryResult, type DeleteQueryOptionsInput, type DeleteQueryResult, type EmbedTextParams, type EmbedTextResult, type ExecuteSimplePromptParams, FieldMapper, GetDataOutput, type GetQueryDataByNameSystemUserInput, type GetQueryDataSystemUserInput, type GetRegistryComponentParams, GraphQLAIClient, GraphQLActionClient, GraphQLComponentRegistryClient, GraphQLDataProvider, GraphQLProviderConfigData, GraphQLSystemUserClient, GraphQLTestingClient, GraphQLTransactionGroup, type MJ_MetadataDB, type QueryEntity, type QueryField, type QueryParameter, type QueryPermission, type QueryPermissionInput, type RegistryComponentSearchResult, RoleInput, RolesAndUsersInput, type RunAIPromptParams, type RunAIPromptResult, type RunDynamicViewSystemUserInput, type RunQuerySystemUserResult, type RunTestParams, type RunTestResult, type RunTestSuiteParams, type RunTestSuiteResult, type RunViewByIDSystemUserInput, type RunViewByNameSystemUserInput, type RunViewSystemUserInput, type RunViewSystemUserResult, type RunViewSystemUserResultRow, type SearchRegistryComponentsParams, type SimplePromptResult, SimpleRemoteEntity, SimpleRemoteEntityField, SimpleRemoteEntityOutput, SyncDataAction, SyncDataResult, SyncRolesAndUsersResult, type TestExecutionProgress, type UpdateQueryInput, type UpdateQueryResult, UserInput, setupGraphQLClient };
3363
+ export { type AccountSearchResult, ActionItemInput, ActionItemOutput, BrowserIndexedDBStorageProvider, BrowserStorageProviderBase, type ComponentDependencyTree, type ComponentSpecWithHash, type CopyBetweenAccountsResult, type CreateAPIKeyParams, type CreateAPIKeyResult, type CreatePreAuthUploadUrlResult, type CreateQueryInput, type CreateQueryResult, type DeleteQueryOptionsInput, type DeleteQueryResult, type EmbedTextParams, type EmbedTextResult, type ExecuteSimplePromptParams, FieldMapper, type FileSearchOptions, type FileSearchResult, GetDataOutput, type GetQueryDataByNameSystemUserInput, type GetQueryDataSystemUserInput, type GetRegistryComponentParams, GraphQLAIClient, GraphQLActionClient, GraphQLComponentRegistryClient, GraphQLDataProvider, GraphQLEncryptionClient, GraphQLFileStorageClient, GraphQLProviderConfigData, GraphQLSystemUserClient, GraphQLTestingClient, GraphQLTransactionGroup, type MJ_MetadataDB, type QueryEntity, type QueryField, type QueryParameter, type QueryPermission, type QueryPermissionInput, type RegistryComponentSearchResult, type RevokeAPIKeyResult, RoleInput, RolesAndUsersInput, type RunAIPromptParams, type RunAIPromptResult, type RunDynamicViewSystemUserInput, type RunQuerySystemUserResult, type RunTestParams, type RunTestResult, type RunTestSuiteParams, type RunTestSuiteResult, type RunViewByIDSystemUserInput, type RunViewByNameSystemUserInput, type RunViewSystemUserInput, type RunViewSystemUserResult, type RunViewSystemUserResultRow, type SearchAcrossAccountsResult, type SearchRegistryComponentsParams, type SimplePromptResult, SimpleRemoteEntity, SimpleRemoteEntityField, SimpleRemoteEntityOutput, type StorageListResult, type StorageObjectMetadata, SyncDataAction, SyncDataResult, SyncRolesAndUsersResult, type TestExecutionProgress, type UpdateQueryInput, type UpdateQueryResult, UserInput, setupGraphQLClient };