UNPKG

@energica-city/shared-amplify-utils

Version:

Shared utilities for AWS Amplify projects

78 lines 11.2 kB
// queries/initialize.ts import { Amplify } from 'aws-amplify'; import { ClientManager } from './ClientManager'; import { QueryFactory } from './QueryFactory'; import { logger } from '../log'; // Global state let globalAmplifyOutputs = null; let initializationPromise = null; const queryFactories = new Map(); /** * Initialize queries with schema and generate query factories automatically. * * @param config Configuration object * @param config.amplifyOutputs The outputs from your Amplify backend * @param config.schema The Amplify schema definition * @param config.entities Optional array of entity names to initialize. If not provided, all entities will be initialized * @param config.clientKey A unique key for the client instance, defaults to 'default' */ export async function initializeQueries(config) { const { amplifyOutputs, schema, entities, clientKey = 'default' } = config; // Initialize Amplify system once if (!initializationPromise) { initializationPromise = (async () => { try { logger.info('Configuring Amplify globally...'); Amplify.configure(amplifyOutputs); globalAmplifyOutputs = amplifyOutputs; const manager = ClientManager.getInstance(clientKey); await manager.initialize(); logger.info('Amplify system initialized successfully', { clientKey }); } catch (error) { initializationPromise = null; const errorMessage = error instanceof Error ? error.message : String(error); logger.error('Failed to initialize Amplify system', { error: errorMessage, }); throw error; } })(); } await initializationPromise; // Get entity names to initialize - ensure they are strings const schemaModelNames = Object.keys(schema.models || {}).filter((key) => typeof key === 'string'); const entitiesToInitialize = entities ?? schemaModelNames; const queries = {}; // Generate query factories for (const entityName of entitiesToInitialize) { const entityKey = String(entityName); if (queryFactories.has(entityKey)) { queries[entityName] = queryFactories.get(entityKey); continue; } try { const queryFactory = await QueryFactory({ name: entityKey, clientKey, }); queryFactories.set(entityKey, queryFactory); queries[entityName] = queryFactory; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); throw new Error(`Failed to initialize entity "${entityKey}": ${errorMessage}`); } } logger.info('Query factories initialized successfully', { totalFactories: Object.keys(queries).length, }); return queries; } /** * Gets the global Amplify outputs */ export function getGlobalAmplifyOutputs() { return globalAmplifyOutputs; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3F1ZXJpZXMvaW5pdGlhbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFHaEMsZUFBZTtBQUNmLElBQUksb0JBQW9CLEdBQTBCLElBQUksQ0FBQztBQUN2RCxJQUFJLHFCQUFxQixHQUF5QixJQUFJLENBQUM7QUFDdkQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7QUFFbEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUdyQyxNQUtEO0lBS0MsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsR0FBRyxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFM0UsaUNBQWlDO0lBQ2pDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzNCLHFCQUFxQixHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDbEMsSUFBSSxDQUFDO2dCQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztnQkFDL0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEMsb0JBQW9CLEdBQUcsY0FBYyxDQUFDO2dCQUV0QyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLE9BQU8sQ0FBQyxVQUFVLEVBQVUsQ0FBQztnQkFFbkMsTUFBTSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YscUJBQXFCLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixNQUFNLFlBQVksR0FDaEIsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFO29CQUNsRCxLQUFLLEVBQUUsWUFBWTtpQkFDcEIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxDQUFDO0lBQ0QsTUFBTSxxQkFBcUIsQ0FBQztJQUU1QiwyREFBMkQ7SUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUM5RCxDQUFDLEdBQUcsRUFBaUIsRUFBRSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FDaEQsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxJQUFJLGdCQUFnQixDQUFDO0lBRTFELE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUM7SUFFNUMsMkJBQTJCO0lBQzNCLEtBQUssTUFBTSxVQUFVLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUM5QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckMsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEQsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksQ0FBaUI7Z0JBQ3RELElBQUksRUFBRSxTQUFTO2dCQUNmLFNBQVM7YUFDVixDQUFDLENBQUM7WUFFSCxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM1QyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsWUFBWSxDQUFDO1FBQ3JDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxZQUFZLEdBQ2hCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RCxNQUFNLElBQUksS0FBSyxDQUNiLGdDQUFnQyxTQUFTLE1BQU0sWUFBWSxFQUFFLENBQzlELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUU7UUFDdEQsY0FBYyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTtLQUM1QyxDQUFDLENBQUM7SUFFSCxPQUFPLE9BSU4sQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsT0FBTyxvQkFBb0IsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcXVlcmllcy9pbml0aWFsaXplLnRzXG5pbXBvcnQgeyBBbXBsaWZ5IH0gZnJvbSAnYXdzLWFtcGxpZnknO1xuaW1wb3J0IHsgQ2xpZW50TWFuYWdlciB9IGZyb20gJy4vQ2xpZW50TWFuYWdlcic7XG5pbXBvcnQgeyBRdWVyeUZhY3RvcnkgfSBmcm9tICcuL1F1ZXJ5RmFjdG9yeSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9sb2cnO1xuaW1wb3J0IHR5cGUgeyBBbXBsaWZ5T3V0cHV0cywgQW1wbGlmeU1vZGVsVHlwZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBHbG9iYWwgc3RhdGVcbmxldCBnbG9iYWxBbXBsaWZ5T3V0cHV0czogQW1wbGlmeU91dHB1dHMgfCBudWxsID0gbnVsbDtcbmxldCBpbml0aWFsaXphdGlvblByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbmNvbnN0IHF1ZXJ5RmFjdG9yaWVzID0gbmV3IE1hcDxzdHJpbmcsIHVua25vd24+KCk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBxdWVyaWVzIHdpdGggc2NoZW1hIGFuZCBnZW5lcmF0ZSBxdWVyeSBmYWN0b3JpZXMgYXV0b21hdGljYWxseS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0gY29uZmlnLmFtcGxpZnlPdXRwdXRzIFRoZSBvdXRwdXRzIGZyb20geW91ciBBbXBsaWZ5IGJhY2tlbmRcbiAqIEBwYXJhbSBjb25maWcuc2NoZW1hIFRoZSBBbXBsaWZ5IHNjaGVtYSBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29uZmlnLmVudGl0aWVzIE9wdGlvbmFsIGFycmF5IG9mIGVudGl0eSBuYW1lcyB0byBpbml0aWFsaXplLiBJZiBub3QgcHJvdmlkZWQsIGFsbCBlbnRpdGllcyB3aWxsIGJlIGluaXRpYWxpemVkXG4gKiBAcGFyYW0gY29uZmlnLmNsaWVudEtleSBBIHVuaXF1ZSBrZXkgZm9yIHRoZSBjbGllbnQgaW5zdGFuY2UsIGRlZmF1bHRzIHRvICdkZWZhdWx0J1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZVF1ZXJpZXM8XG4gIFRTY2hlbWEgZXh0ZW5kcyB7IG1vZGVsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSxcbiAgVFR5cGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgQW1wbGlmeU1vZGVsVHlwZT4sXG4+KGNvbmZpZzoge1xuICBhbXBsaWZ5T3V0cHV0czogQW1wbGlmeU91dHB1dHM7XG4gIHNjaGVtYTogVFNjaGVtYTtcbiAgZW50aXRpZXM/OiAoa2V5b2YgVFR5cGVzICYgc3RyaW5nKVtdO1xuICBjbGllbnRLZXk/OiBzdHJpbmc7XG59KTogUHJvbWlzZTx7XG4gIFtLIGluIGtleW9mIFRUeXBlc106IEF3YWl0ZWQ8XG4gICAgUmV0dXJuVHlwZTx0eXBlb2YgUXVlcnlGYWN0b3J5PEsgJiBzdHJpbmcsIFRUeXBlcz4+XG4gID47XG59PiB7XG4gIGNvbnN0IHsgYW1wbGlmeU91dHB1dHMsIHNjaGVtYSwgZW50aXRpZXMsIGNsaWVudEtleSA9ICdkZWZhdWx0JyB9ID0gY29uZmlnO1xuXG4gIC8vIEluaXRpYWxpemUgQW1wbGlmeSBzeXN0ZW0gb25jZVxuICBpZiAoIWluaXRpYWxpemF0aW9uUHJvbWlzZSkge1xuICAgIGluaXRpYWxpemF0aW9uUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIuaW5mbygnQ29uZmlndXJpbmcgQW1wbGlmeSBnbG9iYWxseS4uLicpO1xuICAgICAgICBBbXBsaWZ5LmNvbmZpZ3VyZShhbXBsaWZ5T3V0cHV0cyk7XG4gICAgICAgIGdsb2JhbEFtcGxpZnlPdXRwdXRzID0gYW1wbGlmeU91dHB1dHM7XG5cbiAgICAgICAgY29uc3QgbWFuYWdlciA9IENsaWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoY2xpZW50S2V5KTtcbiAgICAgICAgYXdhaXQgbWFuYWdlci5pbml0aWFsaXplPFRUeXBlcz4oKTtcblxuICAgICAgICBsb2dnZXIuaW5mbygnQW1wbGlmeSBzeXN0ZW0gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5JywgeyBjbGllbnRLZXkgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpbml0aWFsaXphdGlvblByb21pc2UgPSBudWxsO1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBBbXBsaWZ5IHN5c3RlbScsIHtcbiAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuICBhd2FpdCBpbml0aWFsaXphdGlvblByb21pc2U7XG5cbiAgLy8gR2V0IGVudGl0eSBuYW1lcyB0byBpbml0aWFsaXplIC0gZW5zdXJlIHRoZXkgYXJlIHN0cmluZ3NcbiAgY29uc3Qgc2NoZW1hTW9kZWxOYW1lcyA9IE9iamVjdC5rZXlzKHNjaGVtYS5tb2RlbHMgfHwge30pLmZpbHRlcihcbiAgICAoa2V5KToga2V5IGlzIHN0cmluZyA9PiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyxcbiAgKTtcbiAgY29uc3QgZW50aXRpZXNUb0luaXRpYWxpemUgPSBlbnRpdGllcyA/PyBzY2hlbWFNb2RlbE5hbWVzO1xuXG4gIGNvbnN0IHF1ZXJpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgLy8gR2VuZXJhdGUgcXVlcnkgZmFjdG9yaWVzXG4gIGZvciAoY29uc3QgZW50aXR5TmFtZSBvZiBlbnRpdGllc1RvSW5pdGlhbGl6ZSkge1xuICAgIGNvbnN0IGVudGl0eUtleSA9IFN0cmluZyhlbnRpdHlOYW1lKTtcblxuICAgIGlmIChxdWVyeUZhY3Rvcmllcy5oYXMoZW50aXR5S2V5KSkge1xuICAgICAgcXVlcmllc1tlbnRpdHlOYW1lXSA9IHF1ZXJ5RmFjdG9yaWVzLmdldChlbnRpdHlLZXkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5RmFjdG9yeSA9IGF3YWl0IFF1ZXJ5RmFjdG9yeTxzdHJpbmcsIFRUeXBlcz4oe1xuICAgICAgICBuYW1lOiBlbnRpdHlLZXksXG4gICAgICAgIGNsaWVudEtleSxcbiAgICAgIH0pO1xuXG4gICAgICBxdWVyeUZhY3Rvcmllcy5zZXQoZW50aXR5S2V5LCBxdWVyeUZhY3RvcnkpO1xuICAgICAgcXVlcmllc1tlbnRpdHlOYW1lXSA9IHF1ZXJ5RmFjdG9yeTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGluaXRpYWxpemUgZW50aXR5IFwiJHtlbnRpdHlLZXl9XCI6ICR7ZXJyb3JNZXNzYWdlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5pbmZvKCdRdWVyeSBmYWN0b3JpZXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgIHRvdGFsRmFjdG9yaWVzOiBPYmplY3Qua2V5cyhxdWVyaWVzKS5sZW5ndGgsXG4gIH0pO1xuXG4gIHJldHVybiBxdWVyaWVzIGFzIHtcbiAgICBbSyBpbiBrZXlvZiBUVHlwZXNdOiBBd2FpdGVkPFxuICAgICAgUmV0dXJuVHlwZTx0eXBlb2YgUXVlcnlGYWN0b3J5PEsgJiBzdHJpbmcsIFRUeXBlcz4+XG4gICAgPjtcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBnbG9iYWwgQW1wbGlmeSBvdXRwdXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxBbXBsaWZ5T3V0cHV0cygpOiBBbXBsaWZ5T3V0cHV0cyB8IG51bGwge1xuICByZXR1cm4gZ2xvYmFsQW1wbGlmeU91dHB1dHM7XG59XG4iXX0=