import { GlueClient, ListSchemasCommand, GetSchemaVersionCommand, } from '@aws-sdk/client-glue'; import { SchemaResponse } from '../models/schemas/types'; const registryName = process.env.AWS_REGISTRY_NAME || ''; const clientConfig = { region: 'us-east-2', credentials: { accessKeyId: process.env.AWS_ACCESS_KEY_ID || '', secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || '', sessionToken: process.env.AWS_SESSION_TOKEN || '', }, }; export const getAllGlueSchemas = async (): Promise => { let response: any = {Schemas: [], NextToken: undefined}; const client = new GlueClient(clientConfig); do { let input = { RegistryId: { RegistryName: registryName }, MaxResults: 100, NextToken: response.NextToken}; const command = new ListSchemasCommand(input); const responseListSchemas = await client.send(command); response = { ...response, NextToken: responseListSchemas.NextToken, Schemas: [ ...(response.Schemas || []), ...(responseListSchemas?.Schemas || []), ], }; } while (response.NextToken !== undefined); const generalResponse: Promise[] | undefined = response.Schemas.map(async (schema: any) => { const schemaDefinitionParams = { SchemaId: { SchemaArn: schema.SchemaArn }, SchemaVersionNumber: { LatestVersion: true }, }; const schemaDef = new GetSchemaVersionCommand(schemaDefinitionParams); const schemaGlue = await client.send(schemaDef); const responseSchema: SchemaResponse = { name: schema.SchemaName || '', definition: schemaGlue.SchemaDefinition || '', }; return responseSchema; }); // @ts-ignore return Promise.all(generalResponse) }