import { DashUploadUtils } from '../DashUploadUtils'; import { _invalid, _success, Method } from '../RouteManager'; import ApiManager, { Registration } from './ApiManager'; export default class FireflyManager extends ApiManager { getBearerToken = () => fetch('https://ims-na1.adobelogin.com/ims/token/v3', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: `grant_type=client_credentials&client_id=${process.env._CLIENT_FIREFLY_CLIENT_ID}&client_secret=${process.env._CLIENT_FIREFLY_SECRET}&scope=openid,AdobeID,session,additional_info,read_organizations,firefly_api,ff_apis`, }).catch(error => { console.error('Error:', error); return ''; }); // askFirefly = (prompt: string = 'a realistic illustration of a cat coding') => { // const fetched = this.getBearerToken().then(response => // response.json().then((data: { access_token: string }) => // fetch('https://firefly-api.adobe.io/v3/images/generate', { // method: 'POST', // headers: [ // ['Content-Type', 'application/json'], // ['Accept', 'application/json'], // ['x-api-key', process.env._CLIENT_FIREFLY_CLIENT_ID ?? ''], // ['Authorization', `Bearer ${data.access_token}`], // ], // body: `{ "prompt": "${prompt}" }`, // }) // .then(response => response.json().then(json => JSON.stringify((json.outputs?.[0] as { image: { url: string } })?.image))) // .catch(error => { // console.error('Error:', error); // return ''; // }) // ) // ); // return fetched; // }; askFirefly = (prompt: string = 'a realistic illustration of a cat coding', uploadId: string, strength: number) => { const fetched = this.getBearerToken().then(response => response.json().then((data: { access_token: string }) => { const body: any = { prompt: prompt, structure: { strength: strength, imageReference: { source: { uploadId: uploadId, }, }, }, }; return fetch('https://firefly-api.adobe.io/v3/images/generate', { method: 'POST', headers: [ ['Content-Type', 'application/json'], ['Accept', 'application/json'], ['x-api-key', process.env._CLIENT_FIREFLY_CLIENT_ID ?? ''], ['Authorization', `Bearer ${data.access_token}`], ], body: JSON.stringify(body), }) .then(response => response.json().then(json => JSON.stringify((json.outputs?.[0] as { image: { url: string } })?.image))) .catch(error => { console.error('Error:', error); return ''; }); }) ); return fetched; }; uploadImageToFirefly = (image: Blob) => { const fetched = this.getBearerToken().then(response => response.json().then((data: { access_token: string }) => fetch('https://firefly-api.adobe.io/v3/uploads', { method: 'POST', headers: [ ['Content-Type', image.type], ['x-api-key', process.env._CLIENT_FIREFLY_CLIENT_ID ?? ''], ['Authorization', `Bearer ${data.access_token}`], ], body: image, }) .then(response => response.json()) .then(data => data.uploadId) // Extract the uploadId from the response .catch(error => { console.error('Error:', error); return ''; }) ) ); return fetched; }; protected initialize(register: Registration): void { register({ method: Method.POST, subscription: '/queryFireflyImage', secureHandler: async ({ req, res }) => { const { prompt, imageBlob, strength = 0.5 } = req.body; const uploadId = imageBlob ? await this.uploadImageToFirefly(imageBlob) : null; this.askFirefly(prompt, uploadId, strength).then(fire => DashUploadUtils.UploadImage(JSON.parse(fire).url).then(info => { if (info instanceof Error) _invalid(res, info.message); else _success(res, info.accessPaths.agnostic.client); }) ); }, }); } }