UNPKG

@devx-commerce/strapi

Version:

Medusa plugin for Strapi as CMS

92 lines 8.98 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = syncContentModelsLoader; const utils_1 = require("@medusajs/framework/utils"); const qs_1 = __importDefault(require("qs")); async function syncContentModelsLoader({ container, options, }) { const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER); if (!options?.base_url || !options?.api_key) { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Strapi api key and base URL are required"); } const systemIdKey = options.system_id_key || "systemId"; logger.debug(`Strapi baseURL: ${options.base_url}`); // Validate that required content types exist with correct structure await validateContentTypes(options, logger, systemIdKey); logger.info("Connected to Strapi"); } async function validateContentTypes(options, logger, systemIdKey) { const requiredContentTypes = [ { name: "products", requiredFields: ["title", systemIdKey, "handle", "productType"], relations: { variants: { fields: ["title", systemIdKey, "sku"] } }, }, { name: "product-variants", requiredFields: ["title", systemIdKey, "sku"], relations: { product: {} }, }, { name: "categories", requiredFields: ["title", systemIdKey, "handle"], }, { name: "collections", requiredFields: ["title", systemIdKey, "handle"], }, ]; for (const contentType of requiredContentTypes) { await validateContentType(options, logger, contentType, systemIdKey); } } async function validateContentType(options, logger, contentType, systemIdKey) { logger.debug(`Validating content type: ${contentType.name}`); const params = qs_1.default.stringify({ fields: contentType.requiredFields, populate: contentType.relations || {}, pagination: { limit: 1 }, }); const response = await fetch(`${options.base_url}/${contentType.name}?${params}`, { headers: { Authorization: `Bearer ${options.api_key}`, "Content-Type": "application/json", }, }); if (!response.ok) { let errorDetails = `HTTP ${response.status} ${response.statusText}`; let errorMessage = `Content type '${contentType.name}' validation failed: ${errorDetails}`; try { const errorResponse = await response.json(); if (errorResponse.error) { errorDetails += ` - ${JSON.stringify(errorResponse.error)}`; logger.error(`Strapi content type validation failed for '${contentType.name}':`, errorResponse); if (response.status === 404) { errorMessage = `Content type '${contentType.name}' does not exist in Strapi. Please create it using the schema files provided in the 'strapi-schemas' directory.`; } } } catch (parseError) { logger.error("Failed to parse error response from Strapi", parseError); } throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, errorMessage); } const responseData = await response.json(); const { error } = responseData; if (error) { logger.error(`Strapi returned an error for content type '${contentType.name}':`, error); logger.error("Full response:", responseData); let errorMessage = `Content type '${contentType.name}' validation failed: ${error.message || JSON.stringify(error)}`; // Check if it's a field-related error if (error.message && error.message.includes("field")) { errorMessage += `\n\nRequired fields for '${contentType.name}': ${contentType.requiredFields.join(", ")}`; errorMessage += `\nPlease ensure all required fields exist in your Strapi content type.`; errorMessage += `\nRefer to the schema files in the 'strapi-schemas' directory for the correct structure.`; } throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, errorMessage); } logger.debug(`Content type '${contentType.name}' validation passed`); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNvbnRlbnQtbW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvc3RyYXBpL2xvYWRlci9jcmVhdGUtY29udGVudC1tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFjQSwwQ0FxQkM7QUFsQ0QscURBR21DO0FBQ25DLDRDQUFvQjtBQVNMLEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxFQUNwRCxTQUFTLEVBQ1QsT0FBTyxHQUNzQjtJQUM3QixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDBDQUEwQyxDQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDO0lBRXhELE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRXBELG9FQUFvRTtJQUNwRSxNQUFNLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFekQsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxLQUFLLFVBQVUsb0JBQW9CLENBQ2pDLE9BQXNCLEVBQ3RCLE1BQVcsRUFDWCxXQUFtQjtJQUVuQixNQUFNLG9CQUFvQixHQUFHO1FBQzNCO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsY0FBYyxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDO1lBQy9ELFNB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