UNPKG

@vymalo/medusa-printful

Version:

Connect your MedusaJS store to Printful

104 lines 3.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("@medusajs/utils"); const utils_2 = require("../../../utils"); class PrintfulFulfillment extends utils_1.AbstractFulfillmentProviderService { static identifier = 'printful'; logger_; printfulService; productModuleService; constructor({ logger, printful }) { super(...arguments); this.logger_ = logger; this.printfulService = printful; this.logger_.info('Printful fulfillment provider initialized'); } async canCalculate({ data, }) { this.logger_.info('canCalculate'); console.debug(data); return data.id === 'STANDARD' || data.id === 'PRINTFUL_FAST'; } async calculatePrice(optionData, data, context) { this.logger_.info('calculatePrice'); console.log(optionData, data, context); try { const result = await this.printfulService.getShippingRates({ recipient: { address1: context.shipping_address.address_1, city: context.shipping_address.city, country_code: context.shipping_address.country_code, zip: context.shipping_address.postal_code, phone: context.shipping_address.phone || null, }, items: context.items.map((item) => ({ variant_id: item.variant_id, quantity: item.quantity, })), }); const shippingOption = result.find((option) => option.id === optionData.id); if (shippingOption) { return { calculated_amount: parseInt(shippingOption.rate, 10) * 100, is_calculated_price_tax_inclusive: false, }; } } catch (e) { this.logger_.error('Could not get shipping rates from Printful', e); throw e; } throw new Error('Could not find shipping option'); } async validateOption(data) { this.logger_.info('validateOption'); console.log(data); return true; } async validateFulfillmentData(optionData, data, context) { this.logger_.info('validateFulfillmentData'); console.log(optionData, data, context); return { ...data }; } async getFulfillmentOptions() { return [ { id: 'STANDARD', name: 'Printful Default', }, { id: 'PRINTFUL_FAST', name: 'Printful Express', }, { id: 'printful-return', name: 'Printful Return', is_return: true, }, ]; } async cancelFulfillment(data) { await this.printfulService.cancelOrder(data.printfulOrder.id); } async createFulfillment(data, items, order, _fulfillment) { this.logger_.info(`Create a fulfillment for order ${order.id}`); const printfulOrder = await this.printfulService.confirmOrderById(`@${order.id}`); return { data: { ...data, printfulOrder, }, labels: printfulOrder.shipments.map((d) => ({ tracking_url: d.tracking_url, tracking_number: d.tracking_number, label_url: d.carrier, })), }; } async createReturnFulfillment(fulfillment) { this.logger_.info('createReturnFulfillment'); console.log(fulfillment); return super.createReturnFulfillment(fulfillment); } } exports.default = PrintfulFulfillment; //# sourceMappingURL=printful-fulfillment.js.map