@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 8.3 kB
Source Map (JSON)
{"version":3,"file":"media-image-completion.mjs","names":[],"sources":["../../../../src/services/ai/features/media-image-completion.ts"],"sourcesContent":["import type {\n\tMediaImageGenerateCompletionPollResponse,\n\tMediaImageGenerateCompletionResponse,\n} from \"@lucidcms/types\";\nimport z from \"zod\";\nimport { copy } from \"../../../libs/i18n/index.js\";\nimport { getCmsAiRequest } from \"../../../libs/lucid-remote/services/index.js\";\nimport {\n\tgetCmsAiGenerateFailedMessage,\n\tisCmsAiGenerateAcceptedData,\n\tisCmsAiGenerateCompletedData,\n\tisCmsAiGenerateFailedData,\n} from \"../../../libs/lucid-remote/utils.js\";\nimport { AiGenerationsRepository } from \"../../../libs/repositories/index.js\";\nimport type { ServiceFn } from \"../../../utils/services/types.js\";\nimport getLicenseKey from \"../../options/get-license-key.js\";\nimport checkFeatureEnabled from \"../checks/check-feature-enabled.js\";\nimport completeStoredGeneration from \"../storage/complete-stored-generation.js\";\nimport storeFailedGeneration from \"../storage/store-failed-generation.js\";\n\nconst mediaImageOutputSchema = z\n\t.object({\n\t\tid: z.string(),\n\t\turl: z.string(),\n\t\tstorageKey: z.string(),\n\t\tbyteSize: z.number().int().nonnegative(),\n\t\tmimeType: z.string(),\n\t\textension: z.string(),\n\t\tsize: z.string(),\n\t\tquality: z.string(),\n\t\toutputFormat: z.string(),\n\t})\n\t.strict();\n\nconst mediaImageCompletion: ServiceFn<\n\t[\n\t\t{\n\t\t\trequestId: string;\n\t\t},\n\t],\n\tMediaImageGenerateCompletionPollResponse\n> = async (context, props) => {\n\tconst featureEnabledRes = await checkFeatureEnabled(context, {\n\t\tfeature: \"imageGeneration\",\n\t});\n\tif (featureEnabledRes.error) return featureEnabledRes;\n\n\tconst AiGenerations = new AiGenerationsRepository(\n\t\tcontext.db.client,\n\t\tcontext.config.db,\n\t);\n\tconst storedGenerationRes = await AiGenerations.selectSingleByRequestId({\n\t\trequestId: props.requestId,\n\t\tselect: [\"id\"],\n\t\ttenantKey: context.request.tenantKey,\n\t\tvalidation: {\n\t\t\tenabled: true,\n\t\t\tdefaultError: {\n\t\t\t\tmessage: copy(\"server:core.ai.generation.request.not.found\"),\n\t\t\t\tstatus: 404,\n\t\t\t},\n\t\t},\n\t});\n\tif (storedGenerationRes.error) return storedGenerationRes;\n\n\tconst licenseKeyRes = await getLicenseKey(context);\n\tif (licenseKeyRes.error) return licenseKeyRes;\n\n\tconst requestRes = await getCmsAiRequest(context, {\n\t\tlicenseKey: licenseKeyRes.data,\n\t\trequestId: props.requestId,\n\t});\n\tif (requestRes.error) {\n\t\tif (\n\t\t\trequestRes.error.key?.startsWith(\"ai_provider_\") ||\n\t\t\trequestRes.error.key === \"cms_ai_generation_request_not_found\" ||\n\t\t\trequestRes.error.key === \"cms_ai_generated_image_not_found\"\n\t\t) {\n\t\t\tconst storeRes = await storeFailedGeneration(context, {\n\t\t\t\trequestId: props.requestId,\n\t\t\t\terrorMessage: context.translate(requestRes.error.message) ?? null,\n\t\t\t});\n\t\t\tif (storeRes.error) return storeRes;\n\t\t}\n\n\t\treturn requestRes;\n\t}\n\n\tif (isCmsAiGenerateAcceptedData(requestRes.data.json.data)) {\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: {\n\t\t\t\tmode: requestRes.data.json.data.mode,\n\t\t\t\trequestId: requestRes.data.json.data.requestId,\n\t\t\t\tfeature: {\n\t\t\t\t\tkey: \"media.image.generate\",\n\t\t\t\t\tversion: \"v1\",\n\t\t\t\t},\n\t\t\t\tstatus: requestRes.data.json.data.status,\n\t\t\t},\n\t\t};\n\t}\n\n\tif (isCmsAiGenerateFailedData(requestRes.data.json.data)) {\n\t\tconst errorMessage = getCmsAiGenerateFailedMessage(\n\t\t\trequestRes.data.json.data,\n\t\t\tcontext.translate(\"server:core.routes.ai.generate.error.message\"),\n\t\t);\n\t\tconst storeRes = await storeFailedGeneration(context, {\n\t\t\trequestId: requestRes.data.json.data.requestId,\n\t\t\terrorMessage,\n\t\t\tusage: requestRes.data.json.data.usage,\n\t\t});\n\t\tif (storeRes.error) return storeRes;\n\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"basic\",\n\t\t\t\tstatus: 502,\n\t\t\t\tmessage: copy.literal(errorMessage),\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tif (!isCmsAiGenerateCompletedData(requestRes.data.json.data)) {\n\t\tconst storeRes = await storeFailedGeneration(context, {\n\t\t\trequestId: props.requestId,\n\t\t\terrorMessage: context.translate(\n\t\t\t\t\"server:core.routes.ai.generate.error.message\",\n\t\t\t),\n\t\t});\n\t\tif (storeRes.error) return storeRes;\n\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"basic\",\n\t\t\t\tstatus: 502,\n\t\t\t\tmessage: copy(\"server:core.routes.ai.generate.error.message\"),\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst outputParse = mediaImageOutputSchema.safeParse(\n\t\trequestRes.data.json.data.output,\n\t);\n\tif (!outputParse.success) {\n\t\tconst storeRes = await storeFailedGeneration(context, {\n\t\t\trequestId: requestRes.data.json.data.requestId,\n\t\t\terrorMessage: context.translate(\n\t\t\t\t\"server:core.routes.ai.generate.error.message\",\n\t\t\t),\n\t\t\tusage: requestRes.data.json.data.usage,\n\t\t});\n\t\tif (storeRes.error) return storeRes;\n\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"basic\",\n\t\t\t\tstatus: 502,\n\t\t\t\tmessage: copy(\"server:core.routes.ai.generate.error.message\"),\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst response: MediaImageGenerateCompletionResponse = {\n\t\tmode: requestRes.data.json.data.mode,\n\t\tstatus: requestRes.data.json.data.status,\n\t\trequestId: requestRes.data.json.data.requestId,\n\t\tfeature: {\n\t\t\tkey: \"media.image.generate\",\n\t\t\tversion: \"v1\",\n\t\t},\n\t\toutput: outputParse.data,\n\t\tusage: requestRes.data.json.data.usage,\n\t};\n\n\tconst storeRes = await completeStoredGeneration(context, {\n\t\tresponse,\n\t});\n\tif (storeRes.error) return storeRes;\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: response,\n\t};\n};\n\nexport default mediaImageCompletion;\n"],"mappings":"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"}